Olá pessoal,
Alguém sabria me responder onde estou errando!?
Pq com certeza estou errando, mas onde!?
Tenho 3 tables: alerta, alertasubgrupo, subgrupo.
Não sei se meu mapemento está correto, caso não esteja, peço o favor de corrigir tbém.
Pra ser sincero tudo isso é só pra fazer um teste com o VRaptor3, pois comecei a me interessar por ele,
e estou bem afim de utilizá-lo em meus projetos.
@Entity
@Table(name = "ALERTA")
public class Alerta implements Serializable {
private static final long serialVersionUID = 7568788380991674964L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "CD_ALERT")
private Integer cdAlert;
@Column(name = "DS_ALERT")
private String dsAlert;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "alerta", fetch = FetchType.LAZY)
private List<AlertaSubgrupo> alertaSubgrupo;
//Getters & Setters
@Entity
@Table(name="ALERTA_SUBGRUPO")
public class AlertaSubgrupo implements Serializable {
private static final long serialVersionUID = 7037865871225887837L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="cd_alert_subgr")
private Integer cdAlertaSubgrupo;
@JoinColumn(name = "CD_SUBGR", referencedColumnName = "CD_SUBGR")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Subgrupo subgrupo;
@JoinColumn(name = "CD_ALERT", referencedColumnName = "CD_ALERT")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Alerta alerta;
@Entity
@Table(name="SUBGRUPO")
public class Subgrupo implements Serializable {
private static final long serialVersionUID = -1502114025418728832L;
@Id
@Column(name = "CD_SUBGR", nullable = false)
private Integer cdSubgr;
@Column(name = "NM_SUBGR")
private String nmSubgr;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "subgrupo", fetch = FetchType.LAZY)
private List<AlertaSubgrupo> alertaSubgrupo;
minha view inicial (apenas para teste) apresenta dois links
Qdo clico na lista, apresenta a seguinte lista:
CD DS Assunto DS Alerta
[color=blue]1[/color] Alerta 001 Alerta 001
[color=blue]2[/color] Alerta 002 Alerta 002
[color=blue]3[/color] Alerta 003 Alerta 003
Qdo eu clico no numero 1 por exemplo, ele deve ir para o método mostrado abaixo, e depois passar para a lógica do form.
Uma vez que quero alterar este item número 1. Sendo assim eu estaria buscando no banco o objeto de código 1.
Este objeto por sua vez possui uma lista de alertaSubgrupo, que como mostra a exceção, está retornando NULL.
já que está ocorrendo o seguinte erro:
>Exception occurred in target VM: failed to lazily initialize a collection of role: br.com.mello.nomeapp.model.Alerta.alertaSubgrupo, [color=red]no session or session was closed [/color]
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.mello.nomeapp.model.Alerta.alertaSubgrupo, no session or session was closed
[color=red]Favor ler os comentários dentro do código[/color]
@Get
@Path("/alertas/id/{alerta.cdAlert}")
public void findById(Alerta alerta){
//Outras DUVIDAS:
//Aqui eu busco de banco, o objeto Alerta vem carregado porém com sua Lista (alertaSubgrupo) com valor null
alerta = alertaDao.findById(alerta.getCdAlert());
//aqui eu penso que estaria jogando para o request (setAttribute) o objeto q veio do banco
result.include("alerta", alerta);
//Aqui eu quero q ele vá para a lógica do form
result.use(Results.logic()).redirectTo(AlertasController.class).form();
}
Na lógica do form como eu recupero o objeto alerta já que incluí ele no result??
Pergunto isso pois não quero fazer um:
e si um :
Apenas para teste essa lógica do form está assim:
@Path("/alertas/form")
public AlertaFormDto form() {
alertaFormDto.setAlerta(alertaDao.findById(new Integer(1)));
alertaFormDto.setSubgrupo(subgrupoDao.findAll());
return alertaFormDto;
}
Sei que coloquei a anotação (LAZY) na classe Alerta :
@OneToMany(cascade = CascadeType.ALL, mappedBy = "alerta", fetch = FetchType.LAZY)
private List<AlertaSubgrupo> alertaSubgrupo;
Pois quero que apresente somente os dados referente a Alerta (Quando acesso a lista) e não seus subgrupos associados.
Porém qdo vou para a VIEW do Form, preciso ter um lista de Subgrupos (isto ele traz sem problemas), mas tbém preciso
que o objeto Alerta, tenha a lista de alertaSubgrupo para que eu possa fazr um forEach e para marcar como [color=#CC0000]selected[/color]
os que são iguais com a lista de subgrupos.
mas aí vem o erro q não existe mais sessão com o banco.
A título de curiosidade estou utilizando o vraptor-3.0.2, spring-2.5.5, hibernate-3.2.6.
Porém utilizando o HibernateDaoSuport, como mostra as classes abaixo:
public class GenericDaoImpl<T> extends HibernateDaoSupport implements
IGenericDao<T> {
private static final Log log = LogFactory.getLog(GenericDaoImpl.class);
private Class<T> clazz;
/**
* @param clazz
*/
public GenericDaoImpl(Class<T> clazz, SessionFactory factory) {
this.clazz = clazz;
setSessionFactory(factory);
setHibernateTemplate(new HibernateTemplate(factory));
}
Aqui está os Daos específicos:
@Component
public class AlertaDaoImpl extends GenericDaoImpl<Alerta> implements IAlertaDao<Alerta>{
public AlertaDaoImpl(SessionFactory factory) {
super(Alerta.class, factory);
}
}
@Component
public class AlertaSubgrupoDaoImpl extends GenericDaoImpl<AlertaSubgrupo> implements IAlertaSubgrupoDao<AlertaSubgrupo>{
public AlertaSubgrupoDaoImpl(SessionFactory factory) {
super(AlertaSubgrupo.class, factory);
}
}
@Component
public class SubgrupoDaoImpl extends GenericDaoImpl<Subgrupo> implements ISubgrupoDao<Subgrupo>{
public SubgrupoDaoImpl(SessionFactory factory) {
super(Subgrupo.class, factory);
}
}
Só mais essa pergunta:
Percebi que foi lançada uma versão vraptor-3.1.0.zip e gostaria de saber pq que na pasta lib/mandatory do projeto não
encontra-se o arquivo ( org.springframework.orm-3.0.0.RELEASE.jar )?! não há necessidade dele para trabalhar com hibernate?!
A exception geral está abaixo do meu problema com a [color=red]no session or session was closed [/color]
StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.view.ResultException: org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.mello.nomeapp.model.Alerta.alertaSubgrupo, no session or session was closed
at br.com.caelum.vraptor.view.DefaultPageResult.forward(DefaultPageResult.java:74)
at br.com.caelum.vraptor.extra.ForwardToDefaultViewInterceptor.intercept(ForwardToDefaultViewInterceptor.java:49)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.OutjectResult.intercept(OutjectResult.java:56)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:66)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:72)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:45)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:313)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Caused by: org.apache.jasper.JasperException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.mello.nomeapp.model.Alerta.alertaSubgrupo, no session or session was closed
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:418)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:333)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at br.com.caelum.vraptor.core.DefaultStaticContentHandler.deferProcessingToContainer(DefaultStaticContentHandler.java:72)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:80)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:873)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:723)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:558)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:490)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:382)
at br.com.caelum.vraptor.view.DefaultPageResult.forward(DefaultPageResult.java:72)
… 65 more
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.mello.nomeapp.model.Alerta.alertaSubgrupo, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:249)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:382)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:258)
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:189)
at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:287)
at org.apache.jsp.WEB_002dINF.jsp.alertas.form_jsp._jspx_meth_c_forEach_2(form_jsp.java from :268)
at org.apache.jsp.WEB_002dINF.jsp.alertas.form_jsp._jspx_meth_c_forEach_1(form_jsp.java from :233)
at org.apache.jsp.WEB_002dINF.jsp.alertas.form_jsp._jspService(form_jsp.java from :113)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
… 81 more