【问题标题】:How to opt out of a @Where filter for an individual JPQL query?如何为单个 JPQL 查询选择退出 @Where 过滤器?
【发布时间】:2019-08-13 05:43:25
【问题描述】:

我有一个使用@Where 注释映射的实体,例如:

@Where(clause = "is_active = 1")

这很好,但现在我想编写一个不使用where 子句中带注释的过滤条件的查询。

我能想到的唯一方法是回退到原生查询。

有没有办法为单个特定查询禁用过滤器?

我正在使用JpaRepository @Query 带注释的接口方法来声明我的查询,例如:

 @Query(name = "UnmergeStudent", value = "select .... student_1.lui = :lui")
 List<UnmergeStudentSummary> findMergedStudentSummaryByLui(@Param("lui") String lui);

我查看了@Query 注释的成员,但看不到任何明显的东西。如果我回退到以正常方法编写实际查询代码,有没有办法避免过滤器?

Hibernate 版本是 5.2.10.Final

【问题讨论】:

  • 陌生人。我做了同样的事情,但是我将 JPQL 与 Left Join 与两个实体一起使用,其中一个具有 Where 过滤器,结果服从查询 JPQL 响应并且没有 Where 过滤器。

标签: hibernate jpa jpql


【解决方案1】:

您不能禁用@Where,但可以改用@Filter

@Where@Filter 的区别在于@Filter 可以参数化,而@Filter 有一个名称,并且必须使用该名称打开:

entityManager
    .unwrap(Session.class)
    .enableFilter("your_filter");

在官方文档中了解更多信息:

https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#pc-filtering

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 2020-07-13
    • 2017-08-14
    • 2019-07-22
    • 2018-08-14
    • 2014-03-22
    • 2013-10-23
    • 2012-01-17
    相关资源
    最近更新 更多