Hibernate 在非主键列上进行连接时,如何编写JPA连接表达式?

Hibernate 在非主键列上进行连接时,如何编写JPA连接表达式?,hibernate,jpa,join,Hibernate,Jpa,Join,我正在使用JPA2.0、Hibernate4.1.0.Final和Spring3.1.1.RELEASE。如何编写一个JPA连接,将非主键列上的两个表连接起来?我有两个实体,Link和Training,都带有orderId字段,但我不知道如何编写连接表达式。通常,我会写作 Root<Link>root=criteriaQuery.from(Link.class); ... Join<Link, Training> link = root.join("trainingId"

我正在使用JPA2.0、Hibernate4.1.0.Final和Spring3.1.1.RELEASE。如何编写一个JPA连接,将非主键列上的两个表连接起来?我有两个实体,Link和Training,都带有orderId字段,但我不知道如何编写连接表达式。通常,我会写作

Root<Link>root=criteriaQuery.from(Link.class);
...
Join<Link, Training> link = root.join("trainingId");
Rootroot=criteriaQuery.from(Link.class);
...
Join link=root.Join(“trainingId”);

但是,这假设表是由主键链接的,而事实并非如此。

与JPQL一样,您需要多个FROM实体

Root<Link> rootLink = criteriaQuery.from(Link.class);
Root<Training> rootTraining = criteriaQuery.from(Training.class);
...
criteriaQuery.where(criteriaBuilder.equal(rootLink.get(link_.linkAttribute), trainingLink.get(training_.trainingAttribute)));
Root rootLink=criteriaQuery.from(Link.class);
Root rootTraining=criteriaQuery.from(Training.class);
...
其中(criteriaBuilder.equal(rootLink.get(link.linkAttribute),trainingLink.get(training.trainingAttribute));