Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠如何忽略@Where注释_Java_Hibernate - Fatal编程技术网

Java 休眠如何忽略@Where注释

Java 休眠如何忽略@Where注释,java,hibernate,Java,Hibernate,我有一个实体: @Entity @Table(name = "[Usermaster]") @Where(clause = "isDeleted = 0") public class User { //... } 在某些流中,我需要忽略@Where注释并获取user,即使isDeleted不是0。我怎样才能做到?(我使用CRUD存储库进行查询)有一个动态版本的@设置,它是@过滤器。见: Hibernate能够预先定义筛选条件,并在类级别和集合级别附加这些筛选。筛选条件允许您定义一个类似于

我有一个实体:

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

在某些流中,我需要忽略@Where注释并获取user,即使isDeleted不是0。我怎样才能做到?(我使用CRUD存储库进行查询)

有一个动态版本的
@设置,它是
@过滤器。见:

Hibernate能够预先定义筛选条件,并在类级别和集合级别附加这些筛选。筛选条件允许您定义一个类似于类和各种集合元素上现有的
“where”
属性的限制子句

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

  • 定义筛选器需要
    /
    @FilterDef
  • /
    @Filter
    必须分配给类或集合
  • 必须在会话级别启用筛选器,例如:
    session.enableFilter(“myFilter”).setParameter(“myFilterParam”,“某些值”)

因此,虽然这有点复杂,但它正好提供了我们所需要的:在运行时打开/关闭的动态
@Where
旧问题,但答案可能是:

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


@过滤器在默认情况下是关闭的,所以为了在整个系统中应用它,我需要在许多地方添加代码。我正在寻找透明的解决方案,这样我就可以在不需要过滤器的情况下只在少数情况下添加新代码,
@Filter
管理更具挑战性。另一方面,这是如何动态地评估
@Where
的唯一方法。即,
@其中
是固定映射。没办法把它关掉。我知道这不是你想要的好答案。。。但另一方面,我使用这种过滤器的经验非常好。有了一些AOP,它会自动为我们启用。。。比如说99%的案例。如果需要的话,我们可以把它关掉..这样就行了;)感谢您的回答,我试图找到一种方法来查找spring数据创建新会话的代码,以找出如何覆盖它并将代码放入启用@Filter的位置,但没有成功。我尝试了同样的方法。你的解决方案是什么?我决定不使用Where或Filter。只是在这里添加了常规查询以链接问题。您知道吗,如果在JPQL中使用@Query时出现相同的情况?它应该可以与JPQL一起使用,最好的猜测就是尝试一下。感谢您的分享,这为我的本机查询实现打开了许多重构点
lst = sessionFactory.getCurrentSession().
createSQLQuery("select {entb.*}  from EntityB entb where  is_deleted=1")                            
       .addEntity("entb", EntityB.class)
       .list();