E ai galera do fórum, estou com um problema na hora de conseguir retirar os dados do banco de dados. Estou utilizando MySQL e JPA2.0 com hibernate4
Tenho uma tabela que representa um objeto
@Entity
@Table(name="cesta")
public class Cesta implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique=true, nullable=false)
private int idCesta;
@Lob()
@Column(nullable=false)
private String descricao;
@Column(nullable=false, length=45)
private String identificador;
@Column(nullable=false, length=45)
private String idioma;
@Column(nullable=false, length=50)
private String nome;
@Lob()
@Column(nullable=false)
private String palavraChave;
@Lob()
@Column(nullable=false)
private String url;
//bi-directional many-to-one association to Alunocesta
@OneToMany(mappedBy="cesta")
private List<Alunocesta> alunocestas;
//bi-directional many-to-one association to Categoriadireito
@OneToMany(mappedBy="cesta")
private List<Categoriadireito> categoriadireitos;
//bi-directional many-to-one association to Categoriaeducacional
@OneToMany(mappedBy="cesta")
private List<Categoriaeducacional> categoriaeducacionals;
//bi-directional many-to-one association to Categoriatecnica
@OneToMany(mappedBy="cesta")
private List<Categoriatecnica> categoriatecnicas;
//bi-directional many-to-one association to Categoriavida
@OneToMany(mappedBy="cesta")
private List<Categoriavida> categoriavidas;
//bi-directional many-to-one association to Cestacha
@OneToMany(mappedBy="cesta")
private List<Cestacha> cestachas;
//bi-directional many-to-one association to Recomendado
@OneToMany(mappedBy="cesta")
private List<Recomendado> recomendados;
public Cesta() {
}
public int getIdCesta() {
return this.idCesta;
}
public void setIdCesta(int idCesta) {
this.idCesta = idCesta;
}
// GETTERS E SETTERS
}
E tenho a tabela com outros atributos ligados a essa tabela atraves de uma chave
@Entity
@Table(name="cestacha")
public class Cestacha implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique=true, nullable=false)
private int idCestaCha;
@Column(nullable=false, length=45)
private String atitude;
@Column(nullable=false, length=45)
private String conhecimento;
@Column(nullable=false, length=45)
private String habilidade;
@Column(nullable=false, length=45)
private String nomeCompetencia;
//bi-directional many-to-one association to Cesta
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="Cesta_idCesta", nullable=false)
private Cesta cesta; // AQUI EU NAO CONSIGO RECUPERAR O ID
public Cestacha() {
}
public int getIdCestaCha() {
return this.idCestaCha;
}
public void setIdCestaCha(int idCestaCha) {
this.idCestaCha = idCestaCha;
}
public String getAtitude() {
return this.atitude;
}
public void setAtitude(String atitude) {
this.atitude = atitude;
}
public String getConhecimento() {
return this.conhecimento;
}
public void setConhecimento(String conhecimento) {
this.conhecimento = conhecimento;
}
public String getHabilidade() {
return this.habilidade;
}
public void setHabilidade(String habilidade) {
this.habilidade = habilidade;
}
public String getNomeCompetencia() {
return this.nomeCompetencia;
}
public void setNomeCompetencia(String nomeCompetencia) {
this.nomeCompetencia = nomeCompetencia;
}
public Cesta getCesta() {
return this.cesta;
}
public void setCesta(Cesta cesta) {
this.cesta = cesta;
}
}
Durante a execução do programa necessito carregar a tabela “cestacha”, até ai tudo bem, mas logo necessito recuperar o objeto cesta, o qual a tabela cesta faz referencia e nao consigo, ele acusa o seguinte erro
Exception in thread "main" org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.event.service.spi.EventListenerRegistry]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:126)
at org.hibernate.internal.SessionImpl.eventListenerGroup(SessionImpl.java:624)
at org.hibernate.internal.SessionImpl.listeners(SessionImpl.java:620)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:953)
at org.hibernate.internal.SessionImpl.immediateLoad(SessionImpl.java:891)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:158)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:195)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at entidade.Cesta_$$_javassist_5.getIdCesta(Cesta_$$_javassist_5.java)
at teste.Main.main(Main.java:137)
[quote=matheus_paulo93]pow gente, eu estou com o mesmo problema, alguem ajuda ai
[/quote]
Faz tempo que postei este problema e nem me lembrava mais deste post, mas consegui resolvê-lo e o problema é mesmo o que o lsouza13 falou carregamento lazy.
Para evitar que isto ocorra, é preciso ter cuidado com os relacionamentos um-para-muitos, por default, o hibernate considera eles lazy, ou seja, ele não os carrega automaticamente. Por exemplo, se vc tem uma tabela usuario e uma tabela telefone e um usuario tem muitos telefones. Se vc der um find, ele carregará todos atributos do usuario e relacionamentos um-para-um, todavia não carregará a lista de telefones. Logo quando vc acessar a lista de telefones, e a sessão estiver fechada, irá ocorrer o famoso LIE - LazyException.
Para que vc evite o LazyException, vc pode fazer uma query e carregar todos dados usando um inner join, por exemplo.
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
Ou durante a transação,antes de fechar o entityManager, vc acessa os dados da lista do telefone, ou seja, dá um find no usuario e depois faz usuario.getTelefones, assim ele seta os valores da lista de telefones e vc pode acessá-los.
Espero ter ajudado e qualquer coisa estamos ai. valeu!!!
Obrigado por se dispor a me ajudar Isouza13, eu ja to rancando os cabelos da cabeça, rsrsrsrsrs
O meu problema pode ser resolvido implementando o padrão Open Session in View, pois estou tentando acessar objeto que está em javassist depois que a sessão é fechada, ja achei varios tutoriais na net para fazer essa implementação, mas é complicado, eu sou inexperiente ainda, por favor me ajude.
Estou usando Hibernate 4, então eu não tenho um arquivo .cfg, eu uso o persistence.xml, e os tutoriais que achei usam o cfg.
vou postar o codigo
Classe Entidade:
@Entity
@Table(name = "t1000")
@Proxy(lazy = true)
public class T1000 extends DAO{
/** */
private static final long serialVersionUID = -4210114976753629982L;
@Id
private Integer c100001;
private String c100002;
private String c100003;
@Temporal(TemporalType.DATE)
private Date c100005;
// bi-directional many-to-one association to T700
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "c100004")
private T700 c100004;
public T1000() {
}
public Integer getC100001() {
return this.c100001;
}
public void setC100001(Integer c100001) {
this.c100001 = c100001;
}
public String getC100002() {
return this.c100002;
}
public void setC100002(String c100002) {
this.c100002 = c100002;
}
public String getC100003() {
return this.c100003;
}
public void setC100003(String c100003) {
this.c100003 = c100003;
}
public Date getC100005() {
return this.c100005;
}
public void setC100005(Date c100005) {
this.c100005 = c100005;
}
public T700 getC100004() {
return c100004;
}
public void setC100004(T700 c100004) {
this.c100004 = c100004;
}
}
e esse é o erro, depois que pesquiso o objeto, eu tenho que add em uma lista e exibir em um datatable na tela, mas nesse momento a sessão ja foi fechada.
javax.el.ELException: /jsf/testes/teste.xhtml @52,52 value="#{item.c100004.c70002}": Error reading 'c70002' on type br.com.CanilKrusemark.dao.T700_$$_javassist_24
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIOutput.getValue(UIOutput.java:169)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at org.primefaces.component.datatable.DataTableRenderer.encodeCell(DataTableRenderer.java:808)
at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:773)
at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:651)
at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:234)
at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:196)
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:82)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.renderView(ResourceViewHandlerWrapper.java:169)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.event.service.spi.EventListenerRegistry]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:126)
at org.hibernate.internal.SessionImpl.eventListenerGroup(SessionImpl.java:736)
at org.hibernate.internal.SessionImpl.listeners(SessionImpl.java:732)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1076)
at org.hibernate.internal.SessionImpl.immediateLoad(SessionImpl.java:992)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:173)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at br.com.CanilKrusemark.dao.T700_$$_javassist_24.getC70002(T700_$$_javassist_24.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
... 51 more
Mar 17, 2013 12:37:55 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/CanilKrusemark] threw exception [Unknown service requested [org.hibernate.event.service.spi.EventListenerRegistry]] with root cause
org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.event.service.spi.EventListenerRegistry]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:126)
at org.hibernate.internal.SessionImpl.eventListenerGroup(SessionImpl.java:736)
at org.hibernate.internal.SessionImpl.listeners(SessionImpl.java:732)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1076)
at org.hibernate.internal.SessionImpl.immediateLoad(SessionImpl.java:992)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:173)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at br.com.CanilKrusemark.dao.T700_$$_javassist_24.getC70002(T700_$$_javassist_24.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
at javax.faces.component.UIOutput.getValue(UIOutput.java:169)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at org.primefaces.component.datatable.DataTableRenderer.encodeCell(DataTableRenderer.java:808)
at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:773)
at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:651)
at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:234)
at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:196)
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:82)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
at org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.renderView(ResourceViewHandlerWrapper.java:169)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)