Hibernate如何忽略@Where注解

Evg*_*rov 2 java hibernate

我有一个实体:

@Entity
@Table(name = "[Usermaster]")
@Where(clause = "isDeleted = 0")
public class User {
//...
}
Run Code Online (Sandbox Code Playgroud)

在某些流程中,即使 isDeleted 不是 0,我也需要忽略 @Where 注释并获取用户。我该怎么做?(我使用 CRUD 存储库来查询)

Rad*_*ler 5

@Where设置有一个动态版本,它是@Filter. 看:

Hibernate 能够预定义过滤条件并在类级别和集合级别附加这些过滤器。过滤条件允许您定义类似于"where"类和各种集合元素上可用的现有属性的限制子句

@Filter 的管理有点复杂,简而言之:

  • <filter-def>/@FilterDef需要定义过滤器
  • <filter>/@Filter必须分配给类或集合
  • 必须在会话级别启用过滤器,例如: session.enableFilter("myFilter").setParameter("myFilterParam", "some-value");

所以,这虽然有点复杂,但提供了我们所需要的:@Where在运行时动态打开/关闭

  • 是的,`@Filter` 管理更具挑战性。另一方面,这是一种方法——唯一的方法——如何动态地评估`@Where`。即`@where` 是一个固定的映射。没办法关掉。我知道这不像你想要的那么好......但另一方面,**我对这样的过滤器的经验非常好**。有了一些 **AOP**,它会为我们 ** 自动启用 **...假设 99% 的情况。如果需要,我们可以将其关闭……这样就可以了 ;) (2认同)

Ale*_*dro 5

老问题,但答案可能在这里

简单的解决方案是使用本机 SQL:

lst = sessionFactory.getCurrentSession().
createSQLQuery("select {entb.*}  from EntityB entb where  is_deleted=1")                            
       .addEntity("entb", EntityB.class)
       .list();
Run Code Online (Sandbox Code Playgroud)