Olá Pessoal,
Estou fazendo alguns testes usando o Spring 2.0.6 e o Hibernate 3.2
Já procurei em vários forums e no Google mas não achei uma solução para este problema. Apesar de exception se repetir em
alguns posts do forum. A exception é:
Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Illegal attempt to associate a
collection with two open sessions; nested exception is org.hibernate.HibernateException: Illegal attempt to associate a
collection with two open sessions
Caused by: org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
Bom, deixe-me mostrar o que estou fazendo:
Classe main que cria um contexto
public class Test1 {
UserService userService;
public static void main(String[] args) {
Test1 test1 = new Test1();
test1.userService.remove(new Long(1)); // 1 é o id de um registro no banco de dados
}
public Test1() {
userService = (UserService)SpringContext.getSpringContext().getService("userService");
}
}
classe UserService
public class UserService {
...
public void remove(Long id) {
User user = getUserDao().load(id); // esta linha funciona
if (user!=null) {
getUserDao().delete(user); // aqui dá o erro
}
}
...
}
o meu DAO é uma classe genérica do Urubatan, ai vai os trechos:
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)
public abstract class HibernateBaseDao<T, PK extends Serializable> extends HibernateDaoSupport implements IBaseDao<T, PK> {
...
@SuppressWarnings("unchecked")
public T load(PK primaryKey) {
try {
return (T) getSession().load(objectClass, primaryKey);
} catch (HibernateException e) {
throw convertHibernateAccessException(e);
}
}
public void delete(PK object) {
try {
getSession().delete(getSession().load(objectClass, object));
} catch (HibernateException e) {
throw convertHibernateAccessException(e);
}
}
...
}
Bom, eu sei que a exception está relacionada a duas sessões, mas como eu acho que o spring gerencia isto, eu não sei como
contornar este problema.
Alguém sabe como resolver isto?
Muito obrigado pessoal!!!
Claudiney