Как объявить именованные запросы, выходящие из классов Hibernate? - PullRequest
1 голос
/ 13 марта 2011

У меня есть класс доступа к данным, который предоставляет основные операции для класса сущностей, используемого на веб-сайте:

public class UserDataAccessService {

   public User login(User u)...
   public User findByUsername(String username)...

Я хочу определить все HQL / SQL-запросы в этом классе доступа к данным, но у меня возникают проблемы с использованием аннотации hibernate @NamedQuery; Hibernate продолжает говорить, что не может найти указанный запрос. Я не собираюсь определять методы поиска / поиска в классах сущностей, потому что не чувствую, что это подходящее место для этого.

Я использую только аннотации и hibernate.cfg.xml, так где я могу объявить эти запросы, чтобы Hibernate мог их найти?

Ответы [ 2 ]

1 голос
/ 05 января 2012

Если вы аннотируете свой DAO с помощью @MappedSuperclass, вы можете поместить свои NamedQueries в DAO. Не забудьте добавить пакет DAO или самого DAO-класса в список аннотированных пакетов / классов в вашей конфигурации Hibernate

0 голосов
/ 13 марта 2011

Вы можете писать запросы в соответствующих файлах сопоставления XML.

//---
<query name="findUser"><![CDATA[select o from User o]]>
</query>
//---

Редактировать:

Именованный собственный запрос:

<sql-query name="findUser">
<return alias="user" class="com.User"/>
//-- native query
</sql-query>

ИзДокументация:

Именованные запросы SQL можно определить в документе сопоставления и вызывать точно так же, как и именованный запрос HQL.

Эти запросы необходимо поместить всоответствующие файлы сопоставления (hbm.xml).

...