Foo aspetto ha questo in esso:org.hibernate.LazyInitializationException: impossibile inizializzare la procura - nessuna sessione, encore un fois
@ManyToMany
private Set<User> favouritedBy;
mentre l'utente ha questo:
@ManyToMany(mappedBy = "favouritedBy")
private Set<Foo> favourites = new HashSet<Foo>();
public Set<Foo> getFavourites() {
return favourite;
}
E fooService ha questo , con la collezione lazyloaded a cui si accede mentre la sessione è aperta, tramite il metodo tranactional:
@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;
}
EDIT Questo lo fissa, senza l'utilizzo di criteri:
Set<Foo> favourites = new HashSet<Foo>(user.getFavourites());
e questo lo fissa con criteri
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();
siete sicuri di aver 'transactionManager' impostato nel contesto primavera e' tx: definito da annotation? – hoaz
sì, tutto funziona bene ovunque ... – NimChimpsky
puoi pubblicare traccia dello stack qui? controlleremo se il codice di gestione delle transazioni è lì – hoaz