如何为单向关系构造反向连接?

Mih*_*vic 7 java jpa join eclipselink criteria-api

我想这很容易,但我无法弄清楚.

如果我有实体Foo和Bar:

@Entity
class Foo{
   @OneToMany
   List<Bar> bars;
}

@Entity
class Bar{
   @Column
   int data;
}
Run Code Online (Sandbox Code Playgroud)

如果我想创建一个Join(javax.persistence.criteria.Join<Foo, Bar>)对象,我可以这样做:

Root<Foo> root = ...;
Join<Foo,Bar> join = root.join(Foo_.bars);
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能进行反向连接

Join<Bar,Foo> inverseJoin = barRoot.join....()...?
Run Code Online (Sandbox Code Playgroud)

因为我在类Bar中没有指向它的Foo父类的java字段,它是单向关系?

Jor*_*e C -1

如果您需要的是一个已知的 Bar,该 Bar 是其所属的 Foo,那么这将适合。句子不会被转换为 SQL JOIN,但它在语义上是等效的。

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Foo> cq = cb.createQuery(Foo.class);

Root<Foo> fooRoot = cq.from(Foo.class);
Root<Bar> barRoot = cq.from(Bar.class);

cq.select(fooRoot);
cq.where(barRoot.in(fooRoot.get("bars")));
Run Code Online (Sandbox Code Playgroud)