我有一个像下面这样的连接引用,第一个连接表达式由JPA API自动构建。
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> c = cb.createTupleQuery();
Root<Demand> demands = c.from(Demand.class);
Join<Demand, Metadata> joinMetadata = demands.join("metadatas", JoinType.LEFT);
但是,我想为我的joinMetadata添加一个aditional条件,比如Metadata.type =“AFFECTATION_KEY”,但我不知道如何。
非常感谢您的帮助
答案 0 :(得分:11)
JPA始终只通过映射连接列加入。 JPA 2.0不支持ON子句,但2.1草案确实有这种支持。
EclipseLink 2.4支持ON子句,
请参阅, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON
也可以通过Criteria API,使用提供on
子句支持的EclipseLink native Expression API,
答案 1 :(得分:7)
Hibernate的Criteria API版本3.6也支持它:
Criteria c = session.createCriteria(Tuple.class);
c.createAlias("demands", "d")
.createAlias("d.metadata", "m",
Criteria.LEFT_JOIN, Restrictions.eq("m.type", "AFFECTATION_KEY"));
或者你可能想要最后一位的Restrictions.eqProperty()。请注意使用第四个参数的不受欢迎的createAlias()版本。以下是文档中的引用
参数: