我正在尝试过滤以在进行查询时仅显示“活动”实体,使用过滤器和基本 MappedSuperClass 并遇到相关表类不尊重相同过滤器的问题。
这是我的模型设置:
@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()
private List<B> bs = new ArrayList<B>(0);
// other model properties
}
@Entity
@Table(name = "B")
public class B extends BaseModel {
// model properties
}
在查询之前,我运行:
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(A.class)
Filter filter = getCurrentSession().enableFilter("baseStatus");
List<A> as = criteria.list();
使用此设置,我将正确的过滤器应用于我正在查询的主类,但子集合(“bs”)没有在连接上被过滤,所以我只剩下活动的“A”和一个子集合的“B”,其中一些“B”处于非活动状态。
理想情况下,我只想在 BaseModel 上有过滤器。有什么方法可以在不对每个关联应用单独的过滤器的情况下做我正在寻找的事情?
谢谢!