bonjour,
avez-vous réussi à modifier ce paramètre de configuration ?
hibernate.cglib.use_reflection_optimizer=false
Peut-être avez-vous résolu votre problème ? Pourrais-je en savoir un peu plus dans ce cas ?
J'ai un problème similaire avec hibernate 3.1, j'essaie de faire l'exemple de base donné dans l'introduction à hibernate (
http://www.hibernate.org/hib_docs/v3/re ... orial.html), et arrivé à l'étape concernant le code suivant :
Code:
else if (args[0].equals("addpersontoevent")) {
Long eventId = mgr.createAndStoreEvent("My Event", new Date());
Long personId = mgr.createAndStorePerson("Foo", "Bar");
mgr.addPersonToEvent(personId, eventId);
System.out.println("Added person " + personId + " to event " + eventId);
j'ai une exception :
Code:
[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, null)
[java] Hibernate: call identity()
[java] Hibernate: insert into PERSON (age, firstname, lastname, PERSON_ID) values (?, ?, ?, null)
[java] Hibernate: call identity()
[java] mgr.addPersonToEvent(1, 1);
[java] Hibernate: select person0_.PERSON_ID as PERSON1_1_0_, person0_.age as age1_0_, person0_.firstname as firstname1_0_, person0_.lastname as lastname1_0_ from PERSON person0_ where person0_.PERSON_ID=?
[java] 10:28:35,303 INFO DefaultLoadEventListener:95 - Error performing load command
[java] org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of events.Person.setEvents
[java] at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:215)
[java] at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:185)
[java] at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3232)
[java] at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:129)
[java] at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
[java] at org.hibernate.loader.Loader.doQuery(Loader.java:717)
[java] at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
[java] at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)
[java] at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:47)
[java] at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:41)
[java] at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2730)
[java] at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:365)
[java] at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:346)
[java] at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:123)
[java] at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:82)
[java] at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
[java] at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:820)
[java] at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:62)
[java] at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:98)
[java] at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:158)
[java] at events.Person$$EnhancerByCGLIB$$8c2329c4.getEvents(<generated>)
[java] at events.EventManager.addPersonToEvent(Unknown Source)
[java] at events.EventManager.main(Unknown Source)
[java] Caused by: net.sf.cglib.beans.BulkBeanException: org.hibernate.collection.PersistentSet
[java] at events.Person$$BulkBeanByCGLIB$$9cc73aea.setPropertyValues(<generated>)
[java] at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:212)
[java] ... 22 more
[java] Caused by: java.lang.ClassCastException: org.hibernate.collection.PersistentSet
[java] ... 24 more
Je pensais tout d'abord que cela pouvait venir du fait que la variable age de la classe Person n'etait pas initialisée, selon ce que j'ai pu lire dans des forums, mais en la settant avec une valeur par défaut dans la classe ou avec le setteur classique, j'ai la même exception.
Voici mon EventManager :
Code:
//...
public class EventManager {
public static void main(String[] args) {
EventManager mgr = new EventManager();
if (args[0].equals("store")) {
mgr.createAndStoreEvent("My Event", new Date());
}
//...
else if (args[0].equals("addpersontoevent")) {
Long eventId = mgr.createAndStoreEvent("My Event", new Date());
Long personId = mgr.createAndStorePerson("Foo", "Bar");
System.out.println("mgr.addPersonToEvent(" + personId + ", " + eventId + ");");
mgr.addPersonToEvent(personId, eventId);
System.out.println("Added person " + personId + " to event " + eventId);
}
HibernateUtil.getSessionFactory().close();
}
private Long createAndStoreEvent(String title, Date theDate) {
//...
}
private Long createAndStorePerson(String firstName, String lastName) {
//...
}
private List listEvents() {
//...
}
private void addPersonToEvent(Long personId, Long eventId) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
//mon problème est ici
Person aPerson = (Person) session.load(Person.class, personId);
Event anEvent = (Event) session.load(Event.class, eventId);
aPerson.getEvents().add(anEvent);
session.getTransaction().commit();
}
}