我正在尝试使用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注释可能是错误的,这样可以解决我的问题。
感谢。
答案 0 :(得分:0)
@Filter
仅对同一实体进行过滤。如果你想过滤联接表的数据,你必须使用@FilterJoinTable
。
Eg: @FilterJoinTable(name="column_name", condition="your_condition")