假设我有一个实体
@Entity
public class Person {
...
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "PERSON_ID")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Item> items;
// probably getters and setters returning the collection
}
现在我希望创建一种可以删除特定项目的过滤机制。
例如,我想要一个过滤器/谓词/主管/ ......那样:
item.getDate()
)item.getDate()
进行比较)"A"
开头的项目(item.getName()
和某些逻辑)我想要这个&#34;过滤&#34;从DB加载后执行(以便客户端不会看到不匹配的项目,例如太旧而无法显示),以及实体存储/更新到DB时(因此不保存无效项目)
有可能吗?在JPA2中,我会使用@PrePersist
,@PostLoad
(等)钩子并在回调中进行过滤,但是在Hibernate中(使用Session
接口而不是{ {1}})我不知道该怎么做。
答案 0 :(得分:1)
以下是一些可能有用的事情:
休眠过滤器(不符合JPA):
https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/filters.html
Hibernate @Where注释(非JPA兼容):
http://www.concretepage.com/hibernate/example-where-hibernate
数据库视图(符合JPA)
创建已过滤数据的数据库视图,并将实体映射到该数据。