Como você decide em quais classes de entidade para colocar as anotações JPA NamedQuery?
-
18-09-2019 - |
Pergunta
dizer que tenho um cliente -. CustomerOrder um-para-muitos bidirecional com o CustomerOrder mantendo o valor total de cada ordem
Se eu tivesse uma consulta para encontrar o valor total de todos os pedidos para um determinado cliente:
select SUM(o.orderValue) from CustomerOrder o where o.customer = :customer
Isso importa em que classe de entidade esta é anotada? Por que você iria colocá-lo em um ou o outro?
Solução
Isso importa em que classe de entidade esta é anotada?
Do ponto de vista técnico, não importa como você vai usar o name
de um @NamedQuery
chamá-lo.
Por que você iria colocá-lo em um ou o outro?
Mas, de um ponto "lógica" de vista, colocando o @NamedQuery
onde está "naturalmente" pertence definitivamente vai facilitar a manutenção. No seu exemplo, gostaria de colocar a consulta na entidade CustomerOrder
porque a consulta é sobre encontrar CustomerOrder
, este é exatamente onde eu esperaria encontrá-lo se eu tivesse que olhar para ele.
Outras dicas
Não importa.
O princípio geral é colocá-lo onde ele pertence logicamente. No seu caso - é melhor estar em CustomerOrder
Coloque-os nos arquivos de mapeamento XML que devem ser declaradas no persistence.xml. Veja este grande link: arjan -tijms.omnifaces.org/2010/09/where-to-put-named-queries-in-jpa
Muitas consultas não fazer 'naturalmente' pertencem com a entidade (e mais você tem que modificar o código de entidade, se você colocá-los lá, cada vez que você precisar de uma nova consulta).