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

时间:2014-11-03 15:20:25

标签: java jpa join eclipselink criteria-api

我想这很容易,但我无法理解。

如果我有实体Foo和Bar:

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

@Entity
class Bar{
   @Column
   int data;
}

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

Root<Foo> root = ...;
Join<Foo,Bar> join = root.join(Foo_.bars);

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

Join<Bar,Foo> inverseJoin = barRoot.join....()...?

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

1 个答案:

答案 0 :(得分:-1)

如果您需要的是一个已知的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")));