如何在Hibernate注释应用程序中外部化命名查询?

fly*_*ire 10 java hibernate hql

有没有办法将HQL命名查询外部化到外部文件.我有太多的命名查询和使用,@NamedQueries@NamedQuery在我的实体类的头部受到伤害.

有没有办法外化到几个文件?

jav*_*ook 10

您可以将查询放入package-info.java域中,例如域对象的根包中.但是,你必须使用Hibernate自己@NamedQueries@NamedQuery注释,而不是那些javax.persistence.

示例package-info.java文件:

@org.hibernate.annotations.NamedQueries({
    @org.hibernate.annotations.NamedQuery(
        name = "foo.findAllUsers", 
        query="from Users") 
}) 

package com.foo.domain;
Run Code Online (Sandbox Code Playgroud)

然后,您必须将包添加到您的AnnotationConfiguration.我使用Spring,所以这是设置annonatedPackages属性的问题:

<bean id="sessionFactory" 
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="annotatedClasses">
      <list>
      ...
      </list>
</property>
<property name="annotatedPackages">
  <list>
      <value>com.foo.domain</value>
  </list>
</property>
Run Code Online (Sandbox Code Playgroud)

您也可以将类型和过滤器定义放在同一个文件中.