【问题标题】:How to join one table with different tables with criteria API?如何使用标准 API 将一张表与不同的表连接起来?
【发布时间】:2016-05-28 10:43:23
【问题描述】:

我有以下课程:

class A {
    private B b;
    // getters/setters
}
class B {
   private C c;
   private D d;
   // getters/setters
}
class C {
   private boolean outdated;
   // getters/setters
}
class D {
   // not important fields
   // getters/setters
}

B 类通过“一对一”关系连接到 A、C 和 D。

我正在尝试使用标准 api 加入下表。

我有以下代码:

Root<A> root = query.from(A.class);
root.join(A_.b)
    .join(B_.c)
    .join(B_.d);

但不幸的是,这段代码无法编译,我会在“.join(B_.d)”处出错,因为在将 B 与 C 连接后,我无法使用 B 的字段进行连接。

我之所以要进行这样的连接是因为我需要有实体 C 没有过时的条件(所以我会为它添加 'on' 条件)。

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: java spring hibernate jpa criteria


    【解决方案1】:

    root.join(A_.b).join(B_.c) 代表C,因此无法加入"B_.d"。你需要这样做

    Root<A> root = query.from(A.class);
    Join<A,B> bJoin = root.join(A_.b);
    bJoin.join(B_.c);
    bJoin.join(B_.d);
    

    【讨论】:

    • 你是绝对正确的,标准 api 中的连接不是一成不变的,所以我可以将每个连接移动到单独的变量中并独立使用它们。
    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多