【问题标题】:Join from left side without references for @ManyToMany从左侧加入,不引用 @ManyToMany
【发布时间】:2023-03-15 14:12:01
【问题描述】:

我有三张桌子。

LEFT ---------|<- LEFT_RIGHT ->|--------- RIGHT
@Entity
class Left {
    // no collection mapping for LeftRight
}

@Entity
class Right {
    // no collection mapping for LeftRight
}

@Entity
class LeftRight {

    @JoinColumn(name="LEFT_ID")
    @ManyToOne
    private Left left;

    @JoinColumn(name="RIGHT_ID")
    @ManyToOne
    private Right right;
}

请注意,LeftRight 都没有对 LeftRights 的任何引用。

在加入LeftRight 时,Criteria-API 有什么方法可以从Left 中进行选择?

【问题讨论】:

    标签: jpa criteria-api


    【解决方案1】:

    您可以为LeftRight 创建条件查询并使用投影来检索left 属性:

    session.createCriteria(LeftRight.class)
        // Add whatever restrictions on Left properties
        .createCriteria("left")
        .add(Restrictions.like("name", "%something%"))
        // Use projection to retrieve the left property
        .setProjection(Projections.property("left"));
    

    【讨论】:

    • 以上代码使用了Hibernate API,不是JPA Criteria API。你能用 JPA Criteria API 来说明上面的方法吗?
    【解决方案2】:

    是的,只需使用一个选择。

    CriteriaQuery cq = cb.createQuery();
    Root r = cq.from(LeftRight.class);
    cq.select(r.get("left"));
    cq.where(...);
    Query query = em.createQuery(cq);
    

    http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Criteria#CriteriaQuery

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多