Bonjour à tous,
Je pensais utiliser les
PreXXXEventListener pour mettre à jour mes objets fonctionnels un peu comme l'aurait fait des
Triggers before .
Je m'aperçois que le code de mon Listener est effectivement appelé, mais que les informations ajoutées par ce code à mon objet ne sont pas sauvées en base.
J'ai effectué un test qui montre ce problème lors de l'implémentation d'un
PreInsertEventListener . J'ai le même problème sur un
PreUpdateEventListener .
J'espère avoir été clair, et que je pourrai trouver une solution de contournement.
A+
Hibernate version:
3.1.1
Mapping documents:
Code:
<hibernate-mapping
package="org.hibernate.test.event">
<class name="Person">
<id name="name"/>
<property name="majDate"/>
</class>
</hibernate-mapping>
Specific Code of TestCase:Code:
protected void configure(Configuration cfg) {
cfg.setListener("pre-insert", new MajDatePreInsertEventListener());
}
Code:
public class MajDatePreInsertEventListener implements PreInsertEventListener {
public boolean onPreInsert(PreInsertEvent _event) {
if (_event.getEntity() instanceof Person) {
((Person) _event.getEntity()).setMajDate(new Date());
}
return false;
}
}
Code between sessionFactory.openSession() and session.close():Code:
Transaction tx = s.beginTransaction();
Person person = new Person("Lilou");
s.save(person);
tx.commit();
s.close();
//After save, majDate is not null
assertNotNull(person.getMajDate());
s = openSession();
tx = s.beginTransaction();
person = (Person) s.createCriteria(Person.class).uniqueResult();
assertEquals("Lilou", person.getName());
//After get, majDate must not null
//but assert is in failure
assertNotNull(person.getMajDate());
tx.commit();
Name and version of the database you are using:
Oracle 9i