如何在oneToMany中进行弹簧过滤

时间:2018-10-06 15:57:52

标签: spring hibernate spring-boot

我有一个带有评论集合的实体。现在,我想为其添加一个字段“私有”。除非明确要求,否则不应包含具有private = true的注释。我显然可以创建一个dto来过滤实体。是否可以在模型上添加可以有条件地打开或关闭的过滤器?

1 个答案:

答案 0 :(得分:2)

是的,您可以在模型上定义一个过滤器:

@Entity
@Table(name="comments")
@FilterDef(name="commentFilter", parameters={
    @ParamDef(name="private", type="boolean")
})
@Filters({
    @Filter(name="commentFilter", condition=":private=isprivate")
})
public class Comments {
    @Id
    @Column(name="id")
    private Integer id;
    @Column(name="private")
    private boolean private;
    ...

和查询

Session session = HibernateUtil.getSessionFactory().openSession();
        System.out.println("--Enable Filter--");
        Filter filter = session.enableFilter("commentFilter");
        filter.setParameter("private",true);
        session.beginTransaction();
        List<Comments> results = session.createQuery("from Comments").list();