janones
#1
Boa tarde,
Estou com o seguinte erro: Illegal attempt to associate a collection with two open sessions
Gostaria de saber como resolver isso? Já procurei se existe 2 seções abertar e nada…
Segue o mapeamento que estou usando…
Para fazer o insert ele funciona, mas na hora de usar o update dá o erro.
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="pessoa", targetEntity=PessoaCategoria.class)
@LazyToOne(LazyToOneOption.PROXY)
@Fetch(FetchMode.JOIN)
public Collection<PessoaCategoria> getPessoasCategoria() {
return pessoasCategoria;
}
Alguém poderia me ajudar?
Vinícius
Poderia postar também o código do SessionFactory e de como você obtém sessions?
janones
#3
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration()
.configure("/WEB-INF/hibernate.cfg.xml")
.buildSessionFactory();
} catch (Throwable ex) {
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession() throws HibernateException {
return sessionFactory.openSession();
}
Sua aplicação é Web? Provavelmente você está usando a mesma session para várias threads o que está causando este problema.
Você poderia utilizar uma implementação de SessionFactory com ThreadLocal que corrige este problema: http://www.hibernate.org/207.html
Existem outras implementações possíveis, sugiro que você dê uma pesquisada.
Abraços,
Guilherme
janones
#5
[quote=guilherme.chapiewski]Sua aplicação é Web? Provavelmente você está usando a mesma session para várias threads o que está causando este problema.
Você poderia utilizar uma implementação de SessionFactory com ThreadLocal que corrige este problema: http://www.hibernate.org/207.html
Existem outras implementações possíveis, sugiro que você dê uma pesquisada.
Abraços,
Guilherme[/quote]
Guilherme,
Obrigado pela ajuda, vou dar uma estudada neste exemplo que vc me passou.
No fim acho que não vou precisar usar essa Collection, vou fazer um mapeamento diferente.
Valeu.
Obraços
Vinícius