2

这是一个真正问题的愚蠢版本

我有三张桌子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 的新手,虽然到目前为止可以合理地使用它,但我完全被困住了,因为我应该如何做这个 join 已经查看了 Oracle、Jboss 等的所有文档,但没有说明应该如何做以及所有我在黑暗中采取的刺伤没有成功。即使在 SO 上,也有许多类似语气的问题,但是当您阅读它们时,这是在问其他问题。

4

2 回答 2

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'的结果做任何额外的事情,你可以忽略重新生成的值。

于 2013-11-25T16:36:20.433 回答
0

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

于 2012-11-20T17:44:35.443 回答