Leo*_*rdo 8 java hibernate jpa
我有一个简单的jpa实体'ApplicationForm',里面有一个到多个列表:
@OneToMany(cascade=CascadeType.REMOVE, mappedBy="textQuestion")
private List<Dictionary> questions;
Run Code Online (Sandbox Code Playgroud)
ApplicationForm中包含的变量Dictionary只是另一个只有问题文本的普通实体.由Dictionary映射的相应数据库表是:
'locale' 'text' 'formId'
en my question 123
it mia domanda 123
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以使用jpa或hibernate构建一个查询,用于检索具有特定语言环境的Dictionary的ApplicationForm实体,例如"it".这对标准的sql来说很容易,但是我无法在hql中进行翻译.
如果不可能,你能建议另一种方式吗?我试图手动迭代字典问题列表并删除不需要的语言环境,但不是很优雅,而且我还有一个jpa/hibernate错误.
我希望我清楚自己,提供的代码就足够了.
谢谢
我想知道是否可以使用jpa或hibernate构建一个查询,用于检索具有特定语言环境的Dictionary的ApplicationForm实体,例如"it".
不是标准的JPA.但是Hibernate允许在给定会话期间将任意过滤器应用于集合加载.从Hibernate Annotations参考指南:
2.4.8.过滤器
Hibernate能够在数据上应用任意过滤器.这些过滤器在运行时应用于给定会话.首先,您需要定义它们.
@org.hibernate.annotations.FilterDef或者@FilterDefs使用相同的名称定义过滤器使用的过滤器定义.过滤器定义有一个name()和一个数组parameters().参数将允许您在运行时调整过滤器的行为.每个参数由a定义,@ParamDef其中包含名称和类型.您还可以定义defaultCondition()给定的 参数,@FilterDef以设置在每个人都没有定义时使用的默认条件@Filter.A@FilterDef(s)可以在类或包级别定义.我们现在需要定义应用于实体加载或集合加载的SQL过滤器子句.
@Filter使用并放置在实体或集合元素上Run Code Online (Sandbox Code Playgroud)@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注释.Run Code Online (Sandbox Code Playgroud)@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<Forest> getForests() { ... }
| 归档时间: |
|
| 查看次数: |
13893 次 |
| 最近记录: |