【问题标题】:Can Hibernate filters be used with criteria queries?Hibernate 过滤器可以与标准查询一起使用吗?
【发布时间】:2015-08-14 16:29:37
【问题描述】:

Hibernate 文档提供了一些关于 Hibernate filters 的信息,并在该部分讨论了 HQL 和负载获取。但它从未明确提及将它们与criteria queries 结合使用。预计以下内容会起作用吗?假设 Hibernate 4.3。

实体定义

@Entity
@FilterDef(name="myFilter", parameters=@ParamDef( name="myParam", type="integer" ) )
@Filters( {
    @Filter(name="myFilter", condition="myField = :myParam")
} )
// assume MyType contains some mapped field named "myField"
public class MyType { ... }

查询代码

sess.enableFilter("myFilter").setParameter("myParam", 1);
Criteria crit = sess.createCriteria(MyType.class);
//set some other restrictions on crit
List items = crit.list();

项目是否已应用myFilter

【问题讨论】:

  • 对不起,不是要添加“JPA”标签。我只是从“相关标签”中单击它。
  • 你试过了吗?结果如何?
  • 我试过了,还是不行。我们的代码有点复杂(远远超过我上面的 sn-p),并且已经被移植到许多不同的主要 Hibernate 版本上,因此很难梳理出理论上预期与观察到的行为。

标签: java hibernate orm filter hibernate-mapping


【解决方案1】:

是的,它也应该适用于 Criteria。无论您使用什么来加载实体(例如,HQL、entityManager.find()、Criteria API),过滤器都应用于会话级别。

【讨论】:

  • 在哪里可以找到过滤应用原生查询的工作示例?
  • 本机查询不需要过滤器。你有 WHERE 子句。
  • 您在上面的括号内有本地查询。这就是我问的原因。
  • 那是通过 @Loader 注释进行的 CRUD 级本机查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2010-12-19
  • 2015-03-30
  • 1970-01-01
  • 2012-08-18
  • 2020-11-03
相关资源
最近更新 更多