Java 有没有任何方法可以像这样使用JPA2标准API进行连接?

Java 有没有任何方法可以像这样使用JPA2标准API进行连接?,java,sql,jpa,criteria,Java,Sql,Jpa,Criteria,我在JPA2标准API方面遇到了麻烦。是否有任何方法可以使用JPA2标准API使smth像这样: 从表1中选择t1.id(t1.id=t2.id) 根据这些规则: 表1没有表2参考 表2有表1参考 结果应该是表1 我与JPA2标准API根兼容。在这种情况下如何创建连接?我是否应该使用两个ROOT:一个用于JOIN,另一个用于SELECT?请回答JPQL查询将是 select e1.id from Entity2 e2 join e2.entity1 e1 使用criteria API,它看起来

我在JPA2标准API方面遇到了麻烦。是否有任何方法可以使用JPA2标准API使smth像这样:

从表1中选择t1.id(t1.id=t2.id)

根据这些规则:

  • 表1没有表2参考
  • 表2有表1参考
  • 结果应该是表1

  • 我与JPA2标准API根兼容。在这种情况下如何创建连接?我是否应该使用两个ROOT:一个用于JOIN,另一个用于SELECT?请回答

    JPQL查询将是

    select e1.id from Entity2 e2 join e2.entity1 e1
    
    使用criteria API,它看起来是这样的(未经测试。我讨厌这个API):

    CriteriaQuery cq=cb.createQuery(Long.class);
    根e2=cq.from(Entity2.class);
    选择(e2.get(Entity2.entity1.get(entity1.id));
    
    使用where 您可以执行一个常见的JPQL跨产品联接:

    SELECT t1.id FROM Table1 t1, Table2 t2 WHERE t2.t1_id = t1.id
    
    JPA对右连接的支持 JPA不支持右连接查询。发件人:

    不需要创建右外部联接和右外部获取联接 Java Persistence 2.0中支持。使用右连接的应用程序 类型将不可移植

    本机SQL查询 因此,另一种选择是使用本机SQL查询

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

    所以使用JPQL更简单…API呢?它支持UNION吗?NI JPQL不支持UNION。你说的“API”是什么意思?JPA2标准API?你必须翻译上面的内容。但是这个API非常麻烦,并且产生难以维护的代码。为什么要使用它而不是非常简单的JPQL?我需要对每个请求进行2次select查询(这比对DB进行2次调用更有效)。所以我在考虑工会。它在普通SQL中运行良好。总之,我在同一实体上有两个案例。这些案例中充满了大量的联接,但在这两种情况下所选字段是相同的。JPA不支持联合。故事结束了。因此,如果您想要联合,请使用本机查询;包括UNION.btw,在原生SQL查询中:table是来自DB的真实表名和字段,或者它是java中的实体&它的字段?我已经更新了原生SQL查询,使其更加清晰;这些是表名
    SELECT Table1.id FROM Table1, Table2 WHERE Table2.t1_id = Table1.id