筛选由jpa / hibernate查询返回的实体中包含的列表
我有一个简单的jpa实体’ApplicationForm’,其中包含一对多列表:
@OneToMany(cascade=CascadeType.REMOVE, mappedBy="textQuestion") private List questions;
ApplicationForm中包含的变量Dictionary只是另一个只有问题文本的普通实体。 由Dictionary映射的相应数据库表是:
'locale' 'text' 'formId' en my question 123 it mia domanda 123
我想知道是否可以使用jpa或hibernate来构建一个查询,用于检索具有特定语言环境的Dictionary的ApplicationForm实体,例如“it”。 这对标准的sql来说很容易,但是我无法在hql中进行翻译。
如果不可能,你能建议另一种方式吗? 我试图手动迭代字典问题列表并删除不需要的语言环境,但不是很优雅,而且我还有一个jpa / hibernate错误。
我希望我清楚自己,提供的代码就足够了。
谢谢
我想知道是否可以使用jpa或hibernate来构建一个查询,用于检索具有特定语言环境的Dictionary的ApplicationForm实体,例如“it”。
不是标准的JPA。 但是Hibernate允许在给定会话期间将任意filter应用于集合加载。 从Hibernate Annotations参考指南:
2.4.8。 filter
Hibernate能够在数据之上应用任意filter。 这些filter在运行时应用于给定会话。 首先,您需要定义它们。
@org.hibernate.annotations.FilterDef
或@FilterDefs
使用相同的名称定义filter使用的filter定义。 filter定义具有name()
和parameters()
数组parameters()
。 参数将允许您在运行时调整filter的行为。 每个参数都由@ParamDef
定义,它具有名称和类型。 您还可以为给定的@FilterDef
定义defaultCondition()
参数,以设置在每个@Filter
中都没有定义时使用的默认条件。 可以在类或包级别定义@FilterDef
。我们现在需要定义应用于实体加载或集合加载的SQLfilter子句。
@Filter
并将其放置在实体或集合元素上@Entity @FilterDef(name="minLength", parameters=@ParamDef( name="minLength", type="integer" ) ) @Filters( { @Filter(name="betweenLength", condition=":minLength <= length and :maxLength >= length"), @Filter(name="minLength", condition=":minLength <= length") } ) public class Forest { ... }
当集合使用关联表作为关系表示时,您可能希望将过滤条件应用于关联表本身或目标实体表。 要在目标实体上应用约束,请使用常规
@Filter
注释。 但是,如果您想要定位关联表,请使用@FilterJoinTable
注释。@OneToMany @JoinTable //filter on the target entity table @Filter(name="betweenLength", condition=":minLength <= length and :maxLength >= length") //filter on the association table @FilterJoinTable(name="security", condition=":userlevel >= requredLevel") public Set
getForests() { ... }
也可以看看
- 第17章过滤数据在Hibernate核心参考文档中。
- Hibernate3filter
- 在Play框架中使用ElementCollection时出现LazyInitializationException
- 如何在JSP页面上映射一对多关系并在提交页面时存储它们?
- 如何为超类编写Hibernate Criteria查询,并检查某个子类?
- 例外:无法解析配置:hibernate.cfg.xml
- 映射键值的Hibernate Criteria
- java.lang.IllegalStateException:具有@ManyToMany 3实体的同一实体的多个表示forms
- 是否有可能获得Hibernate sqlRestriction的连接表的SQL别名?
- 应用程序在eclipse中运行得更快
- 如何在hibernate中阻止SQL注入?