Meu Bean está chamando o método "listar" 4x. Que pode estar acontecendo? Detalhe só há um livro cadastrado no banco.
lista.xhtml
<!DOCTYPE html>
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h1>Lista De Livros</h1>
<hr/>
<h:dataTable var="livro" value="#{listaLivroBean.livros}">
<h:column>
<f:facet name="header">Titulo</f:facet>
#{livro.titulo}
</h:column>
<h:column>
<f:facet name="header">Subtitulo</f:facet>
#{livro.subTitulo}
</h:column>
<h:column>
<f:facet name="header">Descrição</f:facet>
#{livro.descricao}
</h:column>
<h:column>
<f:facet name="header">Qtde Páginas</f:facet>
#{livro.qtdePaginas}
</h:column>
<h:column>
<f:facet name="header">Preço</f:facet>
#{livro.preco}
</h:column>
<h:column>
<f:facet name="header">Data Lançamento</f:facet>
#{livro.dataLancamento.time}
</h:column>
<h:column>
<f:facet name="header">Autores</f:facet>
<ui:repeat var="#{livro.autores}" value="autor">
#{autor.nome}
</ui:repeat>
</h:column>
</h:dataTable>
</html>
ListaLibroBean
package br.com.reis.casadocodigojavaee2.beans;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.inject.Model;
import javax.inject.Inject;
import br.com.reis.casadocodigojavaee2.daos.LivroDao;
import br.com.reis.casadocodigojavaee2.models.Livro;
@Model
public class ListaLivroBean {
@Inject
private LivroDao livroDao;
private List<Livro> livros = new ArrayList<>();
public List<Livro> getLivros() {
this.livros = livroDao.listar();
return livros;
}
}
LivroDao
package br.com.reis.casadocodigojavaee2.daos;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import br.com.reis.casadocodigojavaee2.models.Livro;
public class LivroDao {
@PersistenceContext
private EntityManager entityManager;
public void salvar(Livro livro) {
entityManager.persist(livro);
}
public List<Livro> listar() {
return entityManager.createQuery("select distinct(l) from Livro l join fetch l.autores", Livro.class).getResultList();
}
}
console
17:03:01,143 INFO [stdout] (default task-6) Fase: RESTORE_VIEW 1
17:03:01,146 INFO [stdout] (default task-6) Fase: RENDER_RESPONSE 6
17:03:01,151 INFO [stdout] (default task-6) Hibernate:
17:03:01,151 INFO [stdout] (default task-6) select
17:03:01,151 INFO [stdout] (default task-6) distinct livro0_.id as id1_1_0_,
17:03:01,151 INFO [stdout] (default task-6) autor2_.id as id1_0_1_,
17:03:01,151 INFO [stdout] (default task-6) livro0_.dataLancamento as dataLanc2_1_0_,
17:03:01,152 INFO [stdout] (default task-6) livro0_.descricao as descrica3_1_0_,
17:03:01,152 INFO [stdout] (default task-6) livro0_.preco as preco4_1_0_,
17:03:01,152 INFO [stdout] (default task-6) livro0_.qtdePaginas as qtdePagi5_1_0_,
17:03:01,152 INFO [stdout] (default task-6) livro0_.subTitulo as subTitul6_1_0_,
17:03:01,152 INFO [stdout] (default task-6) livro0_.titulo as titulo7_1_0_,
17:03:01,152 INFO [stdout] (default task-6) autor2_.descricao as descrica2_0_1_,
17:03:01,152 INFO [stdout] (default task-6) autor2_.nome as nome3_0_1_,
17:03:01,152 INFO [stdout] (default task-6) autores1_.Livro_id as Livro_id1_2_0__,
17:03:01,152 INFO [stdout] (default task-6) autores1_.autores_id as autores_2_2_0__
17:03:01,153 INFO [stdout] (default task-6) from
17:03:01,153 INFO [stdout] (default task-6) Livro livro0_
17:03:01,153 INFO [stdout] (default task-6) inner join
17:03:01,153 INFO [stdout] (default task-6) Livro_Autor autores1_
17:03:01,153 INFO [stdout] (default task-6) on livro0_.id=autores1_.Livro_id
17:03:01,153 INFO [stdout] (default task-6) inner join
17:03:01,153 INFO [stdout] (default task-6) Autor autor2_
17:03:01,153 INFO [stdout] (default task-6) on autores1_.autores_id=autor2_.id
17:03:01,159 INFO [stdout] (default task-6) Hibernate:
17:03:01,159 INFO [stdout] (default task-6) select
17:03:01,160 INFO [stdout] (default task-6) distinct livro0_.id as id1_1_0_,
17:03:01,160 INFO [stdout] (default task-6) autor2_.id as id1_0_1_,
17:03:01,160 INFO [stdout] (default task-6) livro0_.dataLancamento as dataLanc2_1_0_,
17:03:01,160 INFO [stdout] (default task-6) livro0_.descricao as descrica3_1_0_,
17:03:01,160 INFO [stdout] (default task-6) livro0_.preco as preco4_1_0_,
17:03:01,160 INFO [stdout] (default task-6) livro0_.qtdePaginas as qtdePagi5_1_0_,
17:03:01,160 INFO [stdout] (default task-6) livro0_.subTitulo as subTitul6_1_0_,
17:03:01,160 INFO [stdout] (default task-6) livro0_.titulo as titulo7_1_0_,
17:03:01,160 INFO [stdout] (default task-6) autor2_.descricao as descrica2_0_1_,
17:03:01,160 INFO [stdout] (default task-6) autor2_.nome as nome3_0_1_,
17:03:01,160 INFO [stdout] (default task-6) autores1_.Livro_id as Livro_id1_2_0__,
17:03:01,161 INFO [stdout] (default task-6) autores1_.autores_id as autores_2_2_0__
17:03:01,161 INFO [stdout] (default task-6) from
17:03:01,161 INFO [stdout] (default task-6) Livro livro0_
17:03:01,161 INFO [stdout] (default task-6) inner join
17:03:01,161 INFO [stdout] (default task-6) Livro_Autor autores1_
17:03:01,161 INFO [stdout] (default task-6) on livro0_.id=autores1_.Livro_id
17:03:01,161 INFO [stdout] (default task-6) inner join
17:03:01,162 INFO [stdout] (default task-6) Autor autor2_
17:03:01,162 INFO [stdout] (default task-6) on autores1_.autores_id=autor2_.id
17:03:01,168 INFO [stdout] (default task-6) Hibernate:
17:03:01,168 INFO [stdout] (default task-6) select
17:03:01,168 INFO [stdout] (default task-6) distinct livro0_.id as id1_1_0_,
17:03:01,168 INFO [stdout] (default task-6) autor2_.id as id1_0_1_,
17:03:01,169 INFO [stdout] (default task-6) livro0_.dataLancamento as dataLanc2_1_0_,
17:03:01,169 INFO [stdout] (default task-6) livro0_.descricao as descrica3_1_0_,
17:03:01,169 INFO [stdout] (default task-6) livro0_.preco as preco4_1_0_,
17:03:01,169 INFO [stdout] (default task-6) livro0_.qtdePaginas as qtdePagi5_1_0_,
17:03:01,169 INFO [stdout] (default task-6) livro0_.subTitulo as subTitul6_1_0_,
17:03:01,169 INFO [stdout] (default task-6) livro0_.titulo as titulo7_1_0_,
17:03:01,169 INFO [stdout] (default task-6) autor2_.descricao as descrica2_0_1_,
17:03:01,169 INFO [stdout] (default task-6) autor2_.nome as nome3_0_1_,
17:03:01,169 INFO [stdout] (default task-6) autores1_.Livro_id as Livro_id1_2_0__,
17:03:01,169 INFO [stdout] (default task-6) autores1_.autores_id as autores_2_2_0__
17:03:01,169 INFO [stdout] (default task-6) from
17:03:01,169 INFO [stdout] (default task-6) Livro livro0_
17:03:01,169 INFO [stdout] (default task-6) inner join
17:03:01,169 INFO [stdout] (default task-6) Livro_Autor autores1_
17:03:01,169 INFO [stdout] (default task-6) on livro0_.id=autores1_.Livro_id
17:03:01,169 INFO [stdout] (default task-6) inner join
17:03:01,169 INFO [stdout] (default task-6) Autor autor2_
17:03:01,170 INFO [stdout] (default task-6) on autores1_.autores_id=autor2_.id