如何对Entity-Bean @OneToMany关系应用默认限制

我有两个实体模型,Customer和Order。 每个客户可能有数千个订单。 我在这两个实体之间有一个OneToMany和ManyToOne关系。

如何将此关系列表仅限制为前10个订单?

是否可以在@OneToMany上应用’WHERE’条件作为属性?

喜欢:

@OneToMany("Where Order.orderNo > 100") 

我的问题是当实体管理器创建的对象所有订单都在内存中创建时。 延迟加载无法解决我的考虑,因为我需要在默认构造中获得前10个订单。

我的意思是,是否可以在@OneToMany上应用’WHERE’条件作为属性?

不是标准的JPA。 但是一些提供商对此有扩展。 例如,Hibernate确实有@Where注释:

 @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @Where(clause="1=1") public Set getTickets() { return tickets; } 

参考

  • Hibernate Annotations参考指南
    • 2.4.6。 集合相关的注释

JPA不支持这一点。 但是在EclipseLink中,您可以使用Expression来过滤关系。

请参阅http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria