Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

não renderiza os autores gravados

Estou com dúvida nesse exercício porém acho que é mais uma dúvida referente ao hibernate. Quando tento renderizar os nomes dos autroes que eu gravei na tabela estou fazendo assim:

<h:dataTable value="#{livroBean.autoresDoLivro}" var="autor" id="tabelaAutores">
      <h:column>
          <h:outputText value="#{autor.nome}"/>
      </h:column>
</h:dataTable>

Na minha classe LivroBean fiz assim:

public class LivroBean {
    private List<Autor> autoresDoLivro = new ArrayList<Autor>();

    public List<Autor> listaAutoresDoLivro(){
        return new DAO<Autor>(Autor.class).listaAutoresDoLivro(4); //coloquei 4 para ver se a query tava funcionando
    }

    public List<Autor> getAutoresDoLivro() {
        return this.listaAutoresDoLivro();
    }

    public void setAutoresDoLivro(List<Autor> autoresDoLivro) {
        this.autoresDoLivro = autoresDoLivro;
    }
}

E na minha classe DAO fiz assim:

public class DAO{
    public List<Autor> listaAutoresDoLivro(int livroId){
        EntityManager em = new JPAUtil().getEntityManager();
        TypedQuery<Autor> query = em.createQuery("select a.nome from autor a "
                + "inner join livro_autor la "
                + "on la.AUTORES_ID = a.ID "
                + "where la.LIVRO_ID =" + livroId, Autor.class);
        List<Autor> autores = query.getResultList();
        return autores;
    }
}

Eu testei essa query no oracle e funciona direitinho, porém eu sei que no hibernate as querys não se escrevem exatamente como no sql puro. O problema é que não sei como faço para essa query funcionar no hibernate. Como faço o join no hibernate? Alguém pode me dar uma dica? Obrigada.

1 resposta
solução!

Oi Thathiana, realmente essa pergunta é voltada para o JPA e não o JSF, porém segue uma explicação para não deixar você desamparada. Se você quer executar query nativa com JPA/Hibernate você deve usar o método createNativeQuery e trabalhar com o objeto Query e não TypedQuery. O problema é que você receberá como retorno um List e terá que fazer o casting de todos os elementos.