如何在JPA2 Criteria Query中使用多个Joins?

时间:2012-11-20 05:51:31

标签: java jpa-2.0 openjpa criteria-api

这是一个真实问题的简化版本

我有三张表STUDENT ADDRESS CLASS

STUDENT ManyToOne ADDRESS STUDENT ManyToMany CLASS

我需要带所有地址相同的学生去同一个班级。

Sql就是这样(只是动态写这个并没有测试过它)

Select * from STUDENT s join ADDRESS a on s.addressId = a.addressId join CLASS c on c.classId = s.classId

现在我是Criteria的新手,虽然到目前为止能够合理地使用它,但我完全陷入困境,因为我应该如何做这个连接已经查看了Oracle,Jboss等所有文档的位置,但没有说明应该如何完成我在黑暗中拍摄的所有刺都没有成功。 即使在SO上也存在许多类似语气的问题,但是当你阅读它们时,它就会被问到。

2 个答案:

答案 0 :(得分:0)

假设您的Student类定义了由JPA管理的集合,您不需要在JPQL查询中定义任何连接。只需检索Student对象,OpenJPA将自动检索地址和类。

答案 1 :(得分:0)

你可以试试这个:

Root<STUDENT> from = criteriaQuery.from(STUDENT.class);
Join<STUDENT, ADDRESS> joinAddress = from.join(STUDENT_.address);
Join<STUDENT, CLASS> joinClass = from.join(STUDENT_.class);

在此之前,您应该从实体生成元类。

javac -classpath "PATHTOLIBRARIES\openjpa-all-2.2.2.jar" -Aopenjpa.metamodel=true STUDENT.java ADDRESS.java CLASS.java

PS:如果你不需要对'from.join'的结果做任何额外的事情,你可以忽略重新翻译的价值。