Как вы решаете, в какие классы сущностей помещать аннотации JPA NamedQuery? - PullRequest
4 голосов
/ 06 января 2010

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 06 января 2010

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

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

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

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

1 голос
/ 16 декабря 2010

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

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

1 голос
/ 06 января 2010

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

...