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();