如何在Hibernate注释应用程序中外部化命名查询?
有没有办法将HQL命名查询外部化到外部文件。 我有太多的命名查询,并且使用@NamedQueries
和@NamedQuery
在我的实体类的头部受到了伤害。
有没有办法外化到几个文件?
您可以将查询放入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;
然后,您必须将包添加到AnnotationConfiguration
。 我使用Spring,因此需要设置annonatedPackages
属性:
...
com.foo.domain
您也可以将类型和filter定义放在同一个文件中。
我不认为这是可能的,因为Annotation属性/属性值必须在编译时可用。 因此,不能将字符串外部化为需要通过某种进程读入的文件。
我试图找到package-info.java可能提供的东西,但找不到任何东西。
组织的替代策略可以是将查询作为常量存储在类中。
在您的实体类中:
@NamedQuery(name="plane.getAll", query=NamedQueries.PLANE_GET_ALL)
然后为查询常量定义一个类:
public class NamedQueries { ... public static final String PLANE_GET_ALL = "select p from Plane p"; ... }
也许这不是作者所要求的(外化到非java文件),但这就是我解决它的方式:
1.)在我的应用程序上下文xml文件中,我将mappingResources
添加到sessionFactory
META-INF/Country.hbm.xml
com.example.Country
在我的Country.hbm.xml中
我用它来定义命名查询,其余的实体配置都在注释中。
也许这有助于某人。
META-INF/Country.hbm.xml
- Hibernate – 如何通过注释设置sql-type?
- 为什么@OneToMany在Hibernate中不能inheritance
- Hibernate在访问关联实体的id时生成SQL查询
- 无法在数据库中保存clob数据类型(Struts,Spring,Hibernate)
- Hibernate和@JoinFormula:org.hibernate.mapping.Formula无法强制转换为org.hibernate.mapping.Column
- ParameterizedType并创建一个通用的dao
- 如何使用Spring来管理与多个数据库的连接
- Hibernate @Transactional Sessions
- 在非调试模式下,Spring @transaction在junit中没有按预期工作