JPA tentando buscar dados de forma errada

Tenho duas entidades em que estão relacionadas:


Natureza -> Assunto

Sendo que Natureza pode ter vários Assuntos. Relação de 1-N.

Em Natureza tenho uma coleção de Assuntos, seguindo da seguinte forma:

    @OneToMany(mappedBy = "naturezaAuditoria")
    @JoinColumn(name = "ASS_NAD_ID")
    private List<Assunto> assunto;

Em Assunto tenho um atributo que é uma Natureza, seguindo da seguinte forma:

    @JoinColumn(name = "ASS_NAD_ID")
    @ManyToOne(targetEntity=Assunto.class)
    private NaturezaAuditoria naturezaAuditoria;

Sendo que, Natureza é uma view e Assunto é uma tabela normal. Estou conseguindo persistir assunto normalmente, fazendo o relacionamento com Natureza, mas quando tenho obter um assunto ou uma lista de assuntos passando Natureza como referência ou mesmo um nome de um assunto, ele acha que estou procurando Assunto com natureza da ID da Natureza. Isso é completamente bizzaro:

...
     @NamedQuery(name = "Assunto.findByNomeAndNatureza", 
        query = "SELECT m FROM Assunto m WHERE m.nome like '%'||:nome||'%' AND m.naturezaAuditoria = :naturezaAuditoria"),
     @NamedQuery(name = "Assunto.findByNatureza", 
        query = "SELECT m FROM Assunto m WHERE m.naturezaAuditoria = :naturezaAuditoria")
...

Usando essas duas NamedQueries. ou seja, tenho duas queries:

“SELECT m FROM Assunto m WHERE m.nome like ‘%’||:nome||’%’ AND m.naturezaAuditoria = :naturezaAuditoria”

e

“SELECT m FROM Assunto m WHERE m.naturezaAuditoria = :naturezaAuditoria”

O erro que ele me retorna é justamente essa stack abaixo:

javax.persistence.EntityNotFoundException: Unable to find br.meupacote.dados.Assunto with id 76

Sendo que ele relacionou o ID 76 como sendo o ID de Assunto, mas na verdade esse ID é da Natureza, por que ele não está conseguindo relacionar da forma correta?

Obrigado turma.

Bom… apesar da twread ser bem antiga, passe pelo mesmo problema agora e como n tinha solução postada vou colocar aquí.

O problema é que o JPA estava tentando relacionar os dados “filhos” com um “pai” inexistente ou modificado… no meu caso, varios filhos tinham ids de “pais” modificados, por exemplo: onde o ID era 8 e agora passou a ser 08…

Pois é… são os legados…

Abraços.
:slight_smile: