Hibernate如何忽略@Where注释

时间:2014-07-09 17:18:21

标签: java hibernate

我有一个实体:

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

在某些流程中我需要忽略@Where注释并获取用户,即使isDeleted不是0.我该如何制作? (我使用CRUD存储库来查询)

2 个答案:

答案 0 :(得分:3)

@Where设置有动态版本,它是@Filter。见:

  

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

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

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

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

答案 1 :(得分:3)

旧问题,但答案可能是here

  

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

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