Bonjour,
Continuant mon apprentissage de spring et hibernate, j'ai découvert un truc qui m'a passablement effrayé:
Un objet attaché à une session hibernate se sauve automatiquement lorsque la session est flushé. Mon problème c'est que souvent, il arrive que je commence à modifier un objet que j'ai au préalable chargé puis qu'entre temps je fasse appel à d'autres méthodes DAO (par ex. pour des tests), dont certaines contiennent des find qui peuvent déclencher un flush.
Si cela arrive, hibernate essaie de sauver un objet que j'ai pas fini de retoucher, déclenchant des problèmes de not null etc....
Le rêve serait que hibernate ne fasse jamais d'update sans que je le demande explicitement mais d'après le forum d'hibernate c'est impossible, celui qui a demandé ça s'est limite fait insulté par des intégristes.
Eventuellement, j'arriverai à maitriser le problème entre ma couche business et les couches DAO inférieures. Mais par contre, si l'entité est manipulée par l'UI et que l'UI fait un appel à une classe business pendant qu'elle est en train de bricoler avec, ça va poser problème.
J'utilise un sessionInViewFilter fourni par Spring, j'ai pensé que mettre singleSession à false pourrait peut être aidé et me permettre d'avoir des sessions par transaction applicative (Un appel vers une classe business = une session) mais je suis pas sûr des effets de bord.
Est-ce une bonne solution? Quelqu'un pourrait m'éclairer un peu sur le sujet? Ce serait cool merci.
Partager