6
respostas

Probelma com a query

fiz corretamente o metodo Listar onde faz uma consulta usando distinct porem na execução do navegador esta dando null pointer falando que não tem mapeamento sendo que já foi feito o mapeamento

livro is not mapped [select distinct (l) from livro l join fetch l.autores]

6 respostas

Jaime, poste a SQL, a classe Modelo, poste os códigos para que fique mais fácil lhe ajudar.

public List listar() { String jpql = "select distinct (l) from livro l " + " join fetch l.autores";

return manager.createQuery(jpql,Livro.class).getResultList(); } //e me mostra oseguine erro Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: livro is not mapped

A query esta errada, deve-se informar o Livro da mesma forma que você nomeou a classe:

String jpql = "select distinct (l) from Livro l " + " join fetch l.autores";

Imagine que possua uma classe Pessoa, para buscar todos as pessoas seria:

select p from Pessoa p

Ou PessoaEndereco:

select e from PessoaEndereco e

Desculpa, mas eu não entendi. O livro que passo na query ta igual ao nome da classe

String jpql = "select distinct(l) from Livro l " + " join fetch l.autores"; ```

A jpql que você postou acima esta com o L do livro minúsculo, o mesmo deve ser Maiúsculo.

Sempre que usamos jpql estamos trabalhando com os nossos modelos então o nome para fazer consultas em suas tabelas deve ser o mesmo nome que damos as classes que representam os modelos.

Imagine que temos uma tabela no banco de dados para guardar dados de pessoas e endereço(pes_pessoa e pes_endereco), porém nossos modelos chamam-se PesPessoa e PesEndereco.

Para montar uma jpql onde iremos buscar todas as pessoas e todos os endereços fazemos:

// buscando as pessoas
select p from PesPessoa

// buscando os endereços
select e from PesEndereco

Repare que não passamos o nome das tabelas igual no banco de dados(pes_pessoa e pes_endereco) e sim o nome de nossos modelos(PesPessoa e PesEndereco).

Ahhhhh massa!!! Valeu ! Vou testar aqui