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
)我不知道该怎么做。
这应该是您的业务逻辑。它应该脱离实体。 – 2014-10-22 06:34:24
@JBNizet但我应该在哪里放置它,以便我可以保证'Person'处于有效状态?在存储库/ DAO中?每次处理它的加载/保存? – Yanko 2014-10-22 06:37:20