anderson.bonavides 14 de abr. de 2009
private Collection<RacaoCachorro> racaoCachorro;
Você deve mudar o Set para Cllection como mostrado. Em seguida posta o resultado.
Deluxe 15 de abr. de 2009
nao deu certo
quando eu cliko na lista no debug ele gera isso
failed to lazily initialize a collection of role : br . com . ambiente . model . dto . Pessoa . racaoCachorro , no session or session was closed
org . hibernate . LazyInitializationException : failed to lazily initialize a collection of role : br . com . ambiente . model . dto . Pessoa . racaoCachorro , 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 . toString ( PersistentBag . java : 483 )
at br . com . ambiente . view . bean . TesteBean . editRegistro ( TesteBean . java : 106 )
at sun . reflect . NativeMethodAccessorImpl . invoke0 ( Native Method )
at sun . reflect . NativeMethodAccessorImpl . invoke ( NativeMethodAccessorImpl . java : 39 )
at sun . reflect . DelegatingMethodAccessorImpl . invoke ( DelegatingMethodAccessorImpl . java : 25 )
at java . lang . reflect . Method . invoke ( Method . java : 597 )
at org . apache . el . parser . AstValue . invoke ( AstValue . java : 152 )
at org . apache . el . MethodExpressionImpl . invoke ( MethodExpressionImpl . java : 276 )
at org . apache . jasper . el . JspMethodExpression . invoke ( JspMethodExpression . java : 68 )
at javax . faces . component . MethodBindingMethodExpressionAdapter . invoke ( MethodBindingMethodExpressionAdapter . java : 88 )
at com . sun . faces . application . ActionListenerImpl . processAction ( ActionListenerImpl . java : 102 )
at javax . faces . component . UICommand . broadcast ( UICommand . java : 387 )
at org . ajax4jsf . component . AjaxActionComponent . broadcast ( AjaxActionComponent . java : 55 )
at org . ajax4jsf . component . UIDataAdaptor . broadcast ( UIDataAdaptor . java : 1383 )
at org . ajax4jsf . component . AjaxViewRoot . processEvents ( AjaxViewRoot . java : 321 )
at org . ajax4jsf . component . AjaxViewRoot . broadcastEvents ( AjaxViewRoot . java : 296 )
at org . ajax4jsf . component . AjaxViewRoot . processPhase ( AjaxViewRoot . java : 253 )
at org . ajax4jsf . component . AjaxViewRoot . processApplication ( AjaxViewRoot . java : 466 )
at com . sun . faces . lifecycle . InvokeApplicationPhase . execute ( InvokeApplicationPhase . java : 82 )
at com . sun . faces . lifecycle . Phase . doPhase ( Phase . java : 100 )
at com . sun . faces . lifecycle . LifecycleImpl . execute ( LifecycleImpl . java : 118 )
at javax . faces . webapp . FacesServlet . service ( FacesServlet . java : 265 )
at org . apache . catalina . core . ApplicationFilterChain . internalDoFilter ( ApplicationFilterChain . java : 290 )
at org . apache . catalina . core . ApplicationFilterChain . doFilter ( ApplicationFilterChain . java : 206 )
at org . ajax4jsf . webapp . BaseXMLFilter . doXmlFilter ( BaseXMLFilter . java : 178 )
at org . ajax4jsf . webapp . BaseFilter . handleRequest ( BaseFilter . java : 290 )
at org . ajax4jsf . webapp . BaseFilter . processUploadsAndHandleRequest ( BaseFilter . java : 390 )
at org . ajax4jsf . webapp . BaseFilter . doFilter ( BaseFilter . java : 517 )
at org . apache . catalina . core . ApplicationFilterChain . internalDoFilter ( ApplicationFilterChain . java : 235 )
at org . apache . catalina . core . ApplicationFilterChain . doFilter ( ApplicationFilterChain . java : 206 )
at com . opensymphony . module . sitemesh . filter . PageFilter . parsePage ( PageFilter . java : 119 )
at com . opensymphony . module . sitemesh . filter . PageFilter . doFilter ( PageFilter . java : 55 )
at org . apache . catalina . core . ApplicationFilterChain . internalDoFilter ( ApplicationFilterChain . java : 235 )
at org . apache . catalina . core . ApplicationFilterChain . doFilter ( ApplicationFilterChain . java : 206 )
at org . apache . catalina . core . StandardWrapperValve . invoke ( StandardWrapperValve . java : 233 )
at org . apache . catalina . core . StandardContextValve . invoke ( StandardContextValve . java : 175 )
at org . apache . catalina . core . StandardHostValve . invoke ( StandardHostValve . java : 128 )
at org . apache . catalina . valves . ErrorReportValve . invoke ( ErrorReportValve . java : 102 )
at org . apache . catalina . core . StandardEngineValve . invoke ( StandardEngineValve . java : 109 )
at org . apache . catalina . connector . CoyoteAdapter . service ( CoyoteAdapter . java : 286 )
at org . apache . coyote . http11 . Http11Processor . process ( Http11Processor . java : 844 )
at org . apache . coyote . http11 . Http11Protocol $ Http11ConnectionHandler . process ( Http11Protocol . java : 583 )
at org . apache . tomcat . util . net . JIoEndpoint $ Worker . run ( JIoEndpoint . java : 447 )
at java . lang . Thread . run ( Thread . java : 619 )
na mesma classe Pessoa tem
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinColumn(name="ID_CACHORRO_PESSOA")
private CachorroPessoa cachorroPessoa = new CachorroPessoa();
Esse objeto cachorroPessoa vem populado normalmente
agora quando é uma Lista como acima… ela nao vem populada…
anderson.bonavides 15 de abr. de 2009
Tira essa anotação:
@LazyCollection (LazyCollectionOption.TRUE)
Daqui a pouco eu te mostro como eu faço o relacionamentos 1 pra muitos, mas acredito que agora funcione.
Deluxe 15 de abr. de 2009
@OneToMany (mappedBy="pessoa")
@Cascade (org.hibernate.annotations.CascadeType.ALL)
private Set<RacaoCachorro> racaoCachorro;
deu certo
Deluxe 15 de abr. de 2009
Agora como eu faço para pegar os valores da Lista e setar no meu objeto ?
Classe Pessoa
@OneToMany ( mappedBy = "pessoa" , fetch = FetchType . LAZY )
@Cascade ( org . hibernate . annotations . CascadeType . ALL )
private Set < RacaoCachorro > racaoCachorro ;
Classe Racao
@ManyToOne ( fetch = FetchType . LAZY )
@JoinColumn ( name = "ID_PESSOA" , nullable = false )
private Pessoa pessoa ;
Agora para setar o Objeto para trazer os dados, fiz de um jeito que presto, mais creio que nao seja o correto
setRacaoCachorroPOJO(pessoaPOJO.getRacaoCachorro().iterator().next());
Agora meu objeto racaoCachorroPOJO vem todo populado com os dados da lista
seria assim ?
anderson.bonavides 15 de abr. de 2009
Isso ta errado, vc tem que popular da seguinte forma:
for(Iterator i; racaoCachoro.iterator(); i.next()){
RacaoCachoro r = (RacaoCachorro) i.hasNext();
racaoCachorro2.getTipoRacao("O tipo da racao");
.
.
.
}
É +/- isso eu fiz de cabeça.
Agora na hora de exibir em um dataTable vc vai ter que mudar o Set para um Collection, List ou DataModel pq dataTable não funciona com Set.
Espero que resolva, mais uma vez posta ai seu resultado.
Deluxe 15 de abr. de 2009
Cara olha só
minha Lista que vai pro dataTable ta vindo certim…
ela vem toda puplada inclusive o Set.
metodo da lista
public List < Pessoa > buscarAllPessoas ( Pessoa pessoaPojo ) {
DetachedCriteria criteria = DetachedCriteria .forClass ( Pessoa .class ) .setFetchMode ( "cachorroPessoa" , FetchMode .JOIN ) ;
criteria .setFetchMode ( "racaoCachorro" , FetchMode .JOIN ) ;
List < Pessoa > lista = new ArrayList < Pessoa > () ;
lista = getHibernateTemplate () .findByCriteria ( criteria ) ;
return lista ;
}
Isso traz a lista toda certa,
agora la na minha dataTable no JSF
no campo que representa a lista como ficaria?
<h:outputText value= "Ração" styleClass= "label" ></h:outputText>
<h:inputText size= "25" value= "#{pessoaBean.pessoaPojo.racaoCachorro.nomeRacao}" />
nesse caso é acessado a pessoa, depois a lista(set), depois o nomeRacao,
mas claramente isso nao funciona.
como eu jogo o valor da lista no text?
anderson.bonavides 15 de abr. de 2009
Como vc vai exibir uma Lista, uma coleção ou um DataModel vc deve usar um rich:subDataTable/ ou um <ui:repeat />. Eu utilizei nos meus um <ui:repeat /> ficando assim:
<rich:column>
<f:facet name="header">Rua</f:facet>
<!-- EXEMPLO UTILIZADO PARA COLLECTIONS -->
<ui:repeat value="#{usuario.endereco}" var="end">
<h:outputText value="#{end.rua}" />
</ui:repeat>
</rich:column>
Lembrando que usuario é a variavel definida no var=“usuario” do datatable.