org.hibernate.LazyInitializationException: konnte nicht initialisiert proxy - keine Sitzung, encore un fois

Foo aussieht, hat dieser in es :

@ManyToMany
private Set<User> favouritedBy;

während der Benutzer ist das:

@ManyToMany(mappedBy = "favouritedBy")
private Set<Foo> favourites  = new HashSet<Foo>();
public Set<Foo> getFavourites() {
  return favourite;
}

Und fooService hat dies mit der lazyloaded Sammlung zugegriffen wird, während die Sitzung wird geöffnet, über das tranactional Methode :

@Transactional(readOnly = true)
public Set<Foo> getFavourites(User user) {
user = dao.get(User.class, user.getId()); //the dao gets a session
Set<Foo> favourites = user.getFavourites();//but the session is not here and the exception is thrown?
return  favourties;
}

BEARBEITEN
So behebt man es, ohne die Verwendung von Kriterien :

Set<Foo> favourites = new HashSet<Foo>(user.getFavourites());

und so behebt man es mit den Kriterien

Session session = sessionFactory.getCurrentSession();
final Criteria crit = session.createCriteria(Foo.class);
crit.setFetchMode("favourites", FetchMode.JOIN);
crit.add(Property.forName("id").eq(id));
return (Foo) crit.uniqueResult();
  • sind Sie sicher, dass Sie transactionManager im Frühjahr Kontext und tx:annotation-driven definiert?
  • ja, alles funktioniert ok, auch sonst überall ...
  • kannst du den stack-trace hier? wir werden prüfen, ob Transaktions-handling-code ist es
InformationsquelleAutor NimChimpsky | 2012-12-02
Schreibe einen Kommentar