如何为单个 JPQL 查询选择退出 @Where 过滤器?

How to opt out of a @Where filter for an individual JPQL query?

我有一个映射了 @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

您不能禁用 @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