Hibernate提供了外置命名查询方式,将hql语句放在一个单独的文件中,而不是直接放在程序中。
我的代码:
<class name="Student" table="t_student">
<id name="id" column="student_id">
<generator class="native"/>
</id>
<property name="name" column="student_name"/>
<many-to-one name="myclass" column="student_class"/>
<query name="serachStu">
<![CDATA[
select s from Student s where s.id>?
]]>
</query>
</class>
结果在java测试类中执行
List list = session.getNamedQuery("serachStu").setParameter(0, 40).list();
出现报错:
org.hibernate.MappingException: Named query not known: serachStu
at org.hibernate.impl.AbstractSessionImpl.getNamedQuery(AbstractSessionImpl.java:93)
……
程序没有找到这个命名查询语句。这个错误的原因是
在映射文件中配置<query>时,应该把他放在<class>的外面。
改成:
<class name="Student" table="t_student">
<id name="id" column="student_id">
<generator class="native"/>
</id>
<property name="name" column="student_name"/>
<many-to-one name="myclass" column="student_class"/>
</class>
<query name="serachStu">
<![CDATA[
select s from Student s where s.id>?
]]>
</query>
参考:
http://forum.springsource.org/showthread.php?24554-Named-Query-not-known