Hebert_Coelho 29 de mar. de 2012
Faça setColecao(null); antes de excluir.
david.cs20 29 de mar. de 2012
Fiz isso porem ele fica exibindo o seguinte erro:
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ws.futuranet.modelo.Grupo.entrevistadores, no session or session was closed
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:87)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:48)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
Hebert_Coelho 29 de mar. de 2012
Faça um find no seu objeto, depois set null e depois delete. sua lista está como lazy. Por isso da erro.
OBS.: Faça tudo no mesmo método.
david.cs20 29 de mar. de 2012
Pode me da um exemplo pois não entendi !
Estou fazendo da seguinte maneira:
public void excluir(Long id) {
Grupo grupo = get(id);
Collection<Usuario> entrevistadores = new ArrayList<Usuario>();
for (Usuario entrevistador : grupo.getEntrevistadores()) {
Usuario entrevistadorPersistente = usuarioDao.get(entrevistador.getId());
entrevistadores.add(entrevistadorPersistente);
entrevistadorPersistente.setGrupoComoEntrevistador(null);
usuarioDao.saveOrUpdate(entrevistadorPersistente);
}
grupo.setEntrevistadores(entrevistadores);
delete(id);
}
david.cs20 30 de mar. de 2012
Resolvi colocando a seguinte anotação:
Ai quando excluo o pai o filho perde o vinculo mais não e excluído.
@OneToMany(cascade={CascadeType.MERGE}, targetEntity=Objeto.class, fetch=FetchType.EAGER)
@JoinColumn(name="colecao_id")
private Collection<Objeto> colecao;