2014-10-22 51 views
0
一个集合的内容

假设我有一个实体如何限制在Hibernate中

@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(等)挂钩并在回调中进行过滤,但在休眠(使用Session接口而不是EntityManager)我不知道该怎么做。

+1

这应该是您的业务逻辑。它应该脱离实体。 – 2014-10-22 06:34:24

+0

@JBNizet但我应该在哪里放置它,以便我可以保证'Person'处于有效状态?在存储库/ DAO中?每次处理它的加载/保存? – Yanko 2014-10-22 06:37:20

回答