如何在Hibernate中限制集合的内容

时间:2014-10-22 06:24:52

标签: java hibernate jpa hibernate-mapping

假设我有一个实体

@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()和某些逻辑)
  • 或做任何其他可插拔逻辑......

我想要这个&#34;过滤&#34;从DB加载后执行(以便客户端不会看到不匹配的项目,例如太旧而无法显示),以及实体存储/更新到DB时(因此不保存无效项目)

有可能吗?在JPA2中,我会使用@PrePersist@PostLoad(等)钩子并在回调中进行过滤,但是在Hibernate中(使用Session接口而不是{ {1}})我不知道该怎么做。

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)

创建已过滤数据的数据库视图,并将实体映射到该数据。