假设我有一个实体
@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
}
现在我希望创建某种过滤机制来删除特定项目。
例如,我想要一个过滤器/谓词/主管/...,它将:
- 将列表限制为最新的 10 个(比较
item.getDate()
) - 将列表限制为仅比某个日期更新的项目(同样,使用
item.getDate()
进行比较) - 将列表限制为名称以
“A”
开头的项目(item.getName()
和一些逻辑) - 或执行任何其他可插入逻辑...
我希望这个“过滤器”在从数据库加载后执行(这样客户端就不会看到不匹配的项目,例如太旧而无法显示),并且当实体存储/更新到DB(因此不会保存无效项目)。
这可能吗?在 JPA2 中,我会使用 @PrePersist
、@PostLoad
(等) Hook 并在回调中进行过滤,但在 Hibernate 中(使用 Session
接口(interface),而不是 EntityManager
)我不知道该怎么做。
最佳答案
以下是一些可能有用的东西:
Hibernate 过滤器(不符合 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
数据库 View (符合 JPA 标准)
创建过滤数据的数据库 View 并将实体映射到该 View 。
关于java - 如何在 Hibernate 中限制集合的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26501436/