如何使用标准API将一个表与不同的表连接起来?

时间:2016-05-28 10:43:23

标签: java spring hibernate jpa criteria

我有以下课程:

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)”中获得错误,因为在使用C加入B之后我无法使用B字段进行加入。

我想要进行此类连接的原因是因为我需要具有实体C不会过时的条件(因此我将为其添加'on'条件)。

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

1 个答案:

答案 0 :(得分: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);