Come si fa a decidere in quali classi di entità di mettere annotazioni JPA NamedQuery?
-
18-09-2019 - |
Domanda
dire che ho un cliente - OrdineCliente uno-a-molti bidirezionale con l'OrdineCliente tenendo il valore totale di ogni ordine
.Se avessi una query per trovare il valore totale di tutti gli ordini di un particolare cliente:
select SUM(o.orderValue) from CustomerOrder o where o.customer = :customer
Ha importanza in cui classe di entità tale viene annotato? Perché si metterlo in uno o l'altro?
Soluzione
Ha importanza in cui classe di entità tale viene annotato?
Da un punto di vista tecnico, non importa come si utilizzerà il name
di un @NamedQuery
chiamarlo.
Perché si metterlo in uno o l'altro?
Ma, da un punto "logico" di vista, mettendo il @NamedQuery
dove viene "naturalmente" appartiene sicuramente facilitare la manutenzione. Nel tuo esempio, io metterei la query nell'entità CustomerOrder
perché la query è di trovare CustomerOrder
, questo è proprio dove mi aspetto di trovarlo se dovessi cercarlo.
Altri suggerimenti
Non importa.
Il principio generale è quello di mettere in cui essa appartiene logicamente. Nel tuo caso - che sarebbe meglio essere in CustomerOrder
metterli nel file di mapping XML che deve essere menzionata nell'elenco persistence.xml. Vedere questo grande link: Arjan -tijms.omnifaces.org/2010/09/where-to-put-named-queries-in-jpa
Un sacco di query non 'naturalmente' appartengono con l'entità (e in seguito si deve modificare il codice entità, se li metti lì, ogni volta che si ha bisogno di una nuova query).