是否有任何方法可以像这样加入JPA2标准API?

时间:2014-05-28 10:59:05

标签: java sql jpa criteria

我遇到了JPA2标准API的问题。有没有任何方法可以使用JPA2标准API来制作这样的smth:

SELECT t1.id FROM 表1 t1 INNER JOIN 表2 t2 ON (t1.id = t2.id)

遵守这些规则:

  1. table1没有表2参考
  2. table2有table1参考
  3. 结果应为table1 ids
  4. 我已经接受了JPA2标准API Root。如何在这种情况下创建联接?我应该使用两个ROOT'一个用于JOIN,另一个用于SELECT?请回复

2 个答案:

答案 0 :(得分:1)

JPQL查询只是

select e1.id from Entity2 e2 join e2.entity1 e1

使用条件API,它看起来像这样(未经测试。我讨厌这个API):

CriteriaQuery<String> cq = cb.createQuery(Long.class);
Root<Entity2> e2 = cq.from(Entity2.class);
cq.select(e2.get(Entity2_.entity1).get(Entity1_.id));

答案 1 :(得分:1)

使用 你可以做一个通常的JPQL跨产品加入:

SELECT t1.id FROM Table1 t1, Table2 t2 WHERE t2.t1_id = t1.id

JPA对右连接的支持 JPA不支持右连接查询。来自here

  

不需要右外连接和右外连接   Java Persistence 2.0支持。使用RIGHT join的应用程序   类型不可移植。

原生SQL查询 所以另一种选择是使用本机SQL查询。

SELECT Table1.id FROM Table1, Table2 WHERE Table2.t1_id = Table1.id