我有一个简单的jpa实体“ ApplicationForm”,其中有一对多列表:
@OneToMany(cascade=CascadeType.REMOVE, mappedBy="textQuestion")
private List<Dictionary> questions;
ApplicationForm中包含的变量Dictionary是仅带有问题文本的另一个普通实体。字典映射的相应html" target="_blank">数据库表为:
'locale' 'text' 'formId'
en my question 123
it mia domanda 123
我想知道是否可以使用jpa或hibernate建立一个查询,以使用特定语言环境(例如“
it”)的Dictionary检索ApplicationForm实体。使用标准sql可以很容易地做到这一点,但是我无法在hql中进行翻译。
如果不可能,您是否可以建议其他方法?我试图手动迭代“字典”问题列表并删除不需要的语言环境,但它并不是很优雅,而且我遇到了jpa / hibernate错误。
我希望我自己说清楚了,提供的代码就足够了。
谢谢
我想知道是否可以使用jpa或hibernate建立一个查询,以使用特定语言环境(例如“
it”)的Dictionary检索ApplicationForm实体。
不适用于标准JPA。但是Hibernate允许在给定的会话期间将任意过滤器应用于收集负载。从《 Hibernate注释参考指南》中:
2.4.8。筛选器
Hibernate可以在数据之上应用任意过滤器。这些过滤器将在运行时应用于给定的会话。首先,您需要定义它们。
@org.hibernate.annotations.FilterDef
或@FilterDefs
使用相同的名称定义过滤器使用的过滤器定义。过滤器定义具有name()
和的数组
parameters()
。参数将允许您在运行时调整过滤器的行为。每个参数由@ParamDef
具有名称和类型的定义。您也可以defaultCondition()
为给定定义一个
参数,@FilterDef
以设置在每个个人中都未定义时使用的默认条件@Filter
。甲
@FilterDef
(或多个)可以在类或包级别来定义。现在,我们需要定义应用于实体加载或集合加载的SQL filter子句。
@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 SetgetForests() { … }
问题内容: 我有一个简单的jpa实体“ ApplicationForm”,其中有一对多列表: ApplicationForm中包含的变量Dictionary是仅带有问题文本的另一个普通实体。字典映射的相应数据库表为: 我想知道是否可以使用jpa或hibernate建立一个查询,以使用特定语言环境(例如“ it”)的Dictionary检索ApplicationForm实体。使用标准sql可以轻松完
问题内容: 我想问一下是否有可能使用hibernate方式做到这一点。假设我已经运行了HQL并检索了一个集合。是否可以使用hibernate进一步过滤它? 我试图在标头类中使用,并在查询之前添加session.enable(),但似乎无法正常工作。 样例代码 精简HQL 问题答案: 不。至少不是您问的方式。一旦您要求Hibernate(使用方法)访问数据库,Hibernate就发挥了作用,结果现在
我有一个使用Postgre 9.3和JPA2.1(Hibernate实现)的Spring MVC应用程序。我有一个类'电影',其中有一组评论。我想写一个JPA NamedQuery,它返回我所有的电影细节,但只有批准的评论。评论可以有其他状态,但我想只显示批准的评论。 我的班级如下所示: 我写的查询不会过滤评论并返回包含所有评论的电影;它的工作原理与上面显示的findMovieById查询相同。
问题内容: 我一直在努力寻找可以通过JPA中的方法调用设置的所有提示的权威资源,但我的想法是空的。有人知道很好的参考吗? 问题答案: 请参阅“ 3.4.1.7。查询提示” 。
我有一个遗留数据库(实际上是Cobol文件),我正在使用Hibernate/JPA的专有JDBC驱动程序访问它。 实体有一个包含2列的复合主键:和。 在遗留数据中有相同的记录,这些记录可以具有的特定值,也可以在表示'All Sites'的列中具有NULL的记录。该文件的理论是,如果您找不到特定的SITE的,那么您可以在中使用NULL查找记录(the'catk-all')。 我不能改变这个“表”的结
问题内容: 我正在写一个跨三个表的JPQL查询。在我的结果列表中,我想获得每个匹配行的所有三个实体(希望如此)。 有任何想法吗? Hibernate 3.x是我的JPA提供程序。 问题答案: IIRC,您可以执行,结果将是,其中数组内容将包含o1,o2,o3值。