Как вы решаете, в какие классы сущностей помещать аннотации JPA NamedQuery?

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

  •  18-09-2019
  •  | 
  •  

Вопрос

Допустим, у меня есть двунаправленная связь "один ко многим" между клиентом и CustomerOrder, причем CustomerOrder содержит общую стоимость каждого заказа.

Если бы у меня был запрос на поиск общей стоимости всех заказов для конкретного клиента :

select SUM(o.orderValue) from CustomerOrder o where o.customer = :customer

Имеет ли значение, в каком классе сущностей это аннотировано?Зачем вам вкладывать это в то или другое?

Это было полезно?

Решение

Имеет ли значение, в каком классе сущностей это аннотировано?

С технической точки зрения, это не имеет значения, поскольку вы будете использовать name из a @NamedQuery чтобы назвать это.

Зачем вам вкладывать это в то или другое?

Но, с "логической" точки зрения, помещая @NamedQuery то, к чему относится "естественно", определенно облегчит обслуживание.В вашем примере я бы поместил запрос в CustomerOrder сущность, потому что запрос является о поиске CustomerOrder, это как раз то место, где я ожидал бы его найти, если бы мне пришлось его искать.

Другие советы

Это не имеет значения.Общий принцип заключается в том, чтобы поместить его туда, где ему логически место.В вашем случае - лучше бы это было в CustomerOrder

Поместите их в файлы сопоставления XML, которые должны быть объявлены в persistence.xml.Смотрите эту замечательную ссылку: arjan-tijms.omnifaces.org/2010/09/where-to-put-named-queries-in-jpa

Многие запросы "естественным образом" не относятся к сущности (и, кроме того, вам придется изменять код сущности, если вы их туда помещаете, каждый раз, когда вам нужен новый запрос).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top