【问题标题】:How to apply a default-restriction on Entity-Bean @OneToMany Relationships如何对 Entity-Bean @OneToMany 关系应用默认限制
【发布时间】:2011-03-31 16:33:55
【问题描述】:

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

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

是否可以将 'WHERE' 条件作为属性应用到 @OneToMany 上?

喜欢:

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

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

【问题讨论】:

    标签: java orm jpa ejb-3.0 one-to-many


    【解决方案1】:

    我的意思是是否可以将“WHERE”条件作为@OneToMany 的属性应用?

    不适用于标准 JPA。但是一些提供商对此进行了扩展。例如,Hibernate 确实有一个 @Where 注释:

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

    参考文献

    【讨论】:

    • 标准JPA应该怎么做?
    • @Navid:除了使用 JPQL 查询,什么都没有,JPA 不提供对此的支持。
    【解决方案2】:

    JPA 不支持这个。但在 EclipseLink 中,您可以使用表达式来过滤关系。

    看, http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 2013-12-01
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多