cache et generateur de type increment
Bonjour,
Voila j'ai une application web multiclient et multibase (une base par client, un client ayant lui-même plusieurs utilisateurs pouvant se connecter ) reposant sur l'usage d'hibernate. J'utilise une seule session factory qui fournit des sessions permettant d'attaquer la base désirée.
J'utilise pour mes objets des id qu'hibernate génère par la méthode increment.
Malheureusement, il conserve en cache la valeur de l'incrément qu'il récupère une première fois par une requete sql (il interroge alors la base concernant le client en cours ). L'incrémentation se fait donc par la suite en cache sans nouvelle requete de la part d'hibernate.
Le problème c'est qu'il prend cette valeur indépendamment de la session en cours et donc du client et de la base choisie.
Je me trouve donc dans le cas ou j'ai pour un client c1 une table t avec 10 tuples ainsi qu'un client c2 avec une même table t mais n'ayant que 2 tuples.
Prenons le cas où Hibernate initialise l'incrément pour la table t sur le client c2 il récupère la valeur 2.
Pour le client c1, la création d'une nouvelle ligne dans la table t entrainera une exception de violation de contrainte car hibernate essaie alors de créer une nouvelle ligne avec un id = 3 déjà attribué dans la table.
C'est ballot ...
A priori, Hibernate gère un cache lié à la sessionFactory alors que je n'ai défini aucun cache de second niveau.
Y aurait-il moyen de configurer via le fichier de description hibernate pour qu'il évite d'utiliser son cache lorsqu'il doit générer un nouvel id ?(j'aimerais garder la génération par increment malgré tout).
Merci pour toutes vos réponses