1

我有一个数据访问类,它公开了网站上使用的实体类的基本操作:

public class UserDataAccessService {

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

我想在这个数据访问类中定义所有 HQL/SQL 查询,但是我在使用 hibernate @NamedQuery 注释时遇到了问题;Hibernate 一直说它找不到命名查询。我不打算在实体类中定义查找/查找方法,因为我觉得它不是合适的位置。

我只使用注解和 hibernate.cfg.xml,那么我在哪里可以声明这些查询以便 Hibernate 可以找到它们?

4

2 回答 2

1

如果您使用 @MappedSuperclass 注释您的 DAO,那么您可以将 NamedQueries 放入 DAO。不要忘记将 DAO 的包或 DAO 类本身添加到 Hibernate 配置中带注释的包/类列表中

于 2012-01-05T10:23:49.440 回答
0

您可以在各自的 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)文件中。

于 2011-03-13T10:31:18.363 回答