Bonjour,
J'utilise hibernate 3.2, sans EJB.
Mes objets POJO sont tous en mode lazy. Ces POJO sont encapsulés dans des objets de service, qui lors des get() sur des propriétés ou listes des POJO traitent les lazyInitialisationException en re-attachant le POJO à une session.
Comme les objets POJO sont initialisés puis détachés, les set() n'ont pas d'impact sur la DB tant que je ne fait pas de save().
Toutefois, et c'est là que je ne comprend plus très bien, l'un de mes objets POJO ayant une propriété "name" de type String sur laquelle je fait un setName() me lance une "lazyInitialisationException : could not initialize proxy - no session".
Pourquoi hibernate cherche-t-il à interroger la DB (ou son cache), alors qu'à priori, la propriété a été initialisée? (elle a déjà été accédée pour affichage, et de toute manière une <property> est par defaut en lazy=false d'après la doc). Et surtout, pourquoi faire cela sur la modification d'une propriété (hibernate n'est pas en autocommit) sur un objet détaché?
Pour me perdre un peu plus, j'ai un objet quasi identique, à la configuration similaire, et je n'ai aucun problème sur le setName().
Pour l'instant le seul remède que j'ai pu trouver, est de faire un getName() encapsulé dans un try/catch(LazyInitialisationException) juste avant de faire mon setName(), pour ne plus avoir l'exception.
Quelqu'un peut-il m'éclairer?
Partager