首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MappedSuperClass对关联表进行Hibernate过滤

使用MappedSuperClass对关联表进行Hibernate过滤
EN

Stack Overflow用户
提问于 2012-05-29 02:23:23
回答 1查看 1.6K关注 0票数 2

我正在尝试过滤,以便在进行查询时只显示“活动”实体,使用过滤器和基本MappedSuperClass,并遇到相关表类不遵守相同过滤器的问题。

这是我的模型设置:

代码语言:javascript
复制
@FilterDef(name="baseStatus")
@Filter(name="baseStatus", condition= "Status = 'A'")
@MappedSuperclass
public abstract class BaseModel {

    @Column(name = "Status", insertable = false)
    private String status;

    // getters and setters...
}

我也有一些有相关集合的模型,例如..

代码语言:javascript
复制
@Entity
@Table(name = "A")
public class A extends BaseModel {
    @OneToMany()
    private List<B> bs = new ArrayList<B>(0);
// other model properties
}

@Entity
@Table(name = "B")
public class B extends BaseModel {
// model properties
}

在查询之前,我运行:

代码语言:javascript
复制
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(A.class)
Filter filter = getCurrentSession().enableFilter("baseStatus");
List<A> as = criteria.list();

使用这个设置,我将适当的过滤器应用于我正在查询的主类,但是子集合("bs")不会在连接上被过滤,所以我只剩下活动的"A“和子集合"B",其中一些”B“是不活动的。

理想情况下,我只希望在BaseModel上有过滤器。有没有办法在不对每个关联应用单独的筛选器的情况下完成我正在寻找的任务?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-31 05:58:08

最后,如果不构建一些自定义的东西,我就找不到一个很好的解决方案,所以我最终在每个模型中的每个关联表中注释了@Filter,如下所示

代码语言:javascript
复制
@FilterDef(name="baseStatus")
@Filter(name="baseStatus", condition= "Status = 'A'")
@MappedSuperclass
public abstract class BaseModel {

    @Column(name = "Status", insertable = false)
    private String status;

    // getters and setters...
}

@Entity
@Table(name = "A")
public class A extends BaseModel {
    @OneToMany()
    @Filter(name="baseStatus", condition= "Status = 'A'")
    private List<B> bs = new ArrayList<B>(0);
// other model properties
}

@Entity
@Table(name = "B")
public class B extends BaseModel {
// model properties
}

虽然不是很理想,但它仍然有效,我仍然只需要调用

代码语言:javascript
复制
Filter filter = getCurrentSession().enableFilter("baseStatus");

一次在公共数据访问层中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10788912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档