2 sessions ouvertes en utilisant un GenericDao et un proxy
Bonjour à tous .
Quand je find un element et que je tente de faire un update il me renvoie cet erreur :Illegal attempt to associate a collection with two open sessions
Voici ma configurartion:
genericDao
Code:
1 2 3 4 5 6 7 8
| public interface GenericDao<T, PK extends Serializable> {
PK save(T newInstance);
T findById(PK id);
List<T> findAll();
void update(T transientObject);
void remove(T persistentObject);
void saveOrUpdate(T object);
} |
genericdaoImpl
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| public class GenericDaoImpl<T, PK extends Serializable> implements GenericDao<T, PK> {
@Autowired
private SessionFactory sessionFactory;
private Class<T> type;
public GenericDaoImpl() {
super();
}
public void saveOrUpdate(T o) {
getSession().saveOrUpdate(o);
}
public GenericDaoImpl(Class<T> type) {
this.type = type;
}
public PK save(T o) {
return (PK) getSession().save(o);
}
public T findById(PK id) {
return (T) getSession().get(type, id);
}
public List<T> findAll() {
Criteria crit = getSession().createCriteria(type);
crit.add(Restrictions.eq("enabled", new Boolean(true)));
return crit.list();
}
public void update(T o) {
getSession().update(o);
}
public void merge(T o) {
getSession().merge(o);
}
public void remove(T o) {
getSession().delete(o);
}
public Session getSession() {
boolean allowCreate = true;
return SessionFactoryUtils.getSession(sessionFactory, allowCreate);
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
} |
et ma classe service :
Code:
1 2 3 4 5 6 7 8 9 10
| @Transactional
@Service("SfdService")
public class SfdServiceImpl extends GenericDaoImpl<Sfd, Integer>implements SfdService,Serializable{
public SfdServiceImpl(Class<Sfd> type) {
super(type);
}
public SfdServiceImpl() {
super();
}
} |
Quand je fais cette commande :
Sfd sfd=sfdService.findById(1);
sfd.setNom("changeName");
sfdService.save(sfd);
J'ai l'erreur "org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions"
Je suspecte ma "getsession" parceque je crois qu'il cree une nouvelle session à chaque appel.
Pouvez vous m'aidez SVP!