过滤@OneToMany集合

时间:2018-04-06 14:27:23

标签: spring hibernate crud

我正在尝试使用hibernate @Filter注释来过滤@ManyToOne集合的返回值。由于应用程序使用“软删除”(即状态从活动状态更改为已删除状态),我想过滤掉“已删除”。

基础课程设置:

@Entity
@FilterDef(name = "active", defaultCondition = "status = 'A'")
public class Foo {
    private Status status;

    // setters and getters
}

@Entity
public class Bar {
    @OneToMany(mappedBy = "bar")
    @Filter(name = "active")
    private List<Foo> fooList;

    // setters and getters
}

我使用CrudRepository来检索Bar个对象:

public interface BarDao extends CrudRepository<Bar, Long> {
    Bar getById(Long id);
}

如果我在数据库中有1个Bar对象,则有3个关联的Foo个对象。 2是“活动”,1是“删除”。但是,当我在CrudRepository上运行查询时,该集合包含所有三个,并且尚未调用@Filter

使用CrudRepository时,使用hibernate注释可能是错误的,这样可以解决我的问题。

感谢。

1 个答案:

答案 0 :(得分:0)

@Filter仅对同一实体进行过滤。如果你想过滤联接表的数据,你必须使用@FilterJoinTable

Eg: @FilterJoinTable(name="column_name", condition="your_condition")