Java Hibernate使用MappedSuperClass对相关表进行筛选
我尝试在进行查询时过滤以仅显示“活动”实体,使用过滤器和基本MappedSuperClass,并遇到关联表类不遵守相同过滤器的问题 以下是我的模型设置:Java Hibernate使用MappedSuperClass对相关表进行筛选,java,spring,hibernate,filter,annotations,Java,Spring,Hibernate,Filter,Annotations,我尝试在进行查询时过滤以仅显示“活动”实体,使用过滤器和基本MappedSuperClass,并遇到关联表类不遵守相同过滤器的问题 以下是我的模型设置: @FilterDef(name="baseStatus") @Filter(name="baseStatus", condition= "Status = 'A'") @MappedSuperclass public abstract class BaseModel { @Column(name = "Status", inserta
@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
}
@实体
@表(name=“A”)
公共类A扩展了BaseModel{
@OneToMany()
私有列表bs=新的ArrayList(0);
//其他模型属性
}
@实体
@表(name=“B”)
公共类B扩展了基本模型{
//模型属性
}
在查询之前,我运行:
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(A.class)
Filter filter = getCurrentSession().enableFilter("baseStatus");
List<A> as = criteria.list();
Criteria=sessionFactory.getCurrentSession().createCriteria(A.class)
Filter Filter=getCurrentSession().enableFilter(“baseStatus”);
List as=标准。List();
使用此设置,我可以将适当的筛选器应用于我正在查询的主类,但子集合(“bs”)在联接时不会被筛选,因此我只剩下活动的“A”和子集合“B”,其中一些“B”处于非活动状态
理想情况下,我只希望基本模型上有过滤器。是否有任何方法可以在不对每个关联应用单独筛选器的情况下实现我想要的功能
谢谢 最后,如果不构建一些自定义内容,我就无法找到一个很好的解决方案,因此我最终在每个模型的每个关联表中注释@Filter,如下所示
@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
}
一次在公共数据访问层
Filter filter = getCurrentSession().enableFilter("baseStatus");