我想这很容易,但我无法理解。
如果我有实体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字段,它是单向关系吗?
答案 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")));