Como você decide em quais classes de entidade para colocar as anotações JPA NamedQuery?

StackOverflow https://stackoverflow.com/questions/2009779

  •  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?

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top