我有一个实体:
@Entity
@Table(name = "[Usermaster]")
@Where(clause = "isDeleted = 0")
public class User {
//...
}
Run Code Online (Sandbox Code Playgroud)
在某些流程中,即使 isDeleted 不是 0,我也需要忽略 @Where 注释并获取用户。我该怎么做?(我使用 CRUD 存储库来查询)
该@Where设置有一个动态版本,它是@Filter. 看:
Hibernate 能够预定义过滤条件并在类级别和集合级别附加这些过滤器。过滤条件允许您定义类似于
"where"类和各种集合元素上可用的现有属性的限制子句。
@Filter 的管理有点复杂,简而言之:
<filter-def>/@FilterDef需要定义过滤器<filter>/@Filter必须分配给类或集合session.enableFilter("myFilter").setParameter("myFilterParam", "some-value");所以,这虽然有点复杂,但提供了我们所需要的:@Where在运行时动态打开/关闭
老问题,但答案可能在这里:
简单的解决方案是使用本机 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)
| 归档时间: |
|
| 查看次数: |
6009 次 |
| 最近记录: |