¿Cómo se decide en el que las clases de entidad para poner anotaciones JPA NamedQuery?
-
18-09-2019 - |
Pregunta
Decir que tengo un cliente - CustomerOrder uno-a-muchos relación bidireccional con el CustomerOrder que contiene el valor total de cada pedido
.Si tuviera una consulta para encontrar el valor total de todos los pedidos de un cliente en particular:
select SUM(o.orderValue) from CustomerOrder o where o.customer = :customer
¿Importa en que clase de entidad este se anota? ¿Por qué poner en una o la otra?
Solución
¿Importa en que clase de entidad este se anota?
Desde un punto de vista técnico, no importa como se va a utilizar el name
de un @NamedQuery
llamarlo.
¿Por qué poner en una o la otra?
Sin embargo, desde un punto de "lógica" de vista, poniendo el @NamedQuery
donde está "naturalmente" pertenece sin duda facilitar el mantenimiento. En su ejemplo, yo pondría la consulta en la entidad CustomerOrder
porque la consulta es sobre la búsqueda de CustomerOrder
, esto es sólo donde uno esperaría encontrar que si tuviera que buscar.
Otros consejos
No importa.
El principio general es ponerlo donde debe estar lógicamente. En su caso - que sería mejor que sea en CustomerOrder
Póngalos en los archivos de mapeo XML que debe ser declarada en el persistence.xml. Ver este gran enlace: arjan -tijms.omnifaces.org/2010/09/where-to-put-named-queries-in-jpa
Las porciones de consultas no 'naturalmente' pertenecer a la entidad (y aún tiene que modificar el código de entidad, si se les puso en su lugar, cada vez que se necesita una nueva consulta).