JPQL表连接查询

时间:2012-07-24 22:24:00

标签: java hibernate jpa-2.0 eclipselink

我如何获得JPA& JPQL将完整的连接查询传递给RDBMS?例如,

SELECT e
FROM Employee e
WHERE a.runkey = e.runkey
  AND e.middle = 'M'
  AND a.state = 'MA'

使用以下Employee类

@Entity
public class Employee implements Serializable {

  blah ... blah

  @OneToOne
  @JoinColumn(
    name = "runkey",
    referencedColumnName = "runkey",
    insertable=false, updatable=false)
  private Address address;
}

和JPQL,

SELECT e
FROM Employee e
INNER JOIN FETCH e.address AS a
WHERE a.state = :state
 AND e.middle = :middle

我能够让Hibernate JPA按预期提取数据。

但是,eclipselink声称它无法遍历相关字段“地址”。

如果是这样,那么我应该如何设计Employee实体以及我应该如何设置JPQL以使eclipselink在两个表上使用WHERE过滤器执行表连接?

(Rant:否则Eclipselink JPA并不比JDO好!!!)

进一步修改:这篇文章对我的案件意味着什么....
https://forums.oracle.com/forums/thread.jspa?threadID=1568659

1 个答案:

答案 0 :(得分:1)

问题是您正在尝试根据JPQL规范对不允许的连接提取进行别名。无论如何,Hibernate允许这样做。 您仍然可以使用query hints获取EclipseLink所需的行为。

看看以下帖子:

以下链接也很有用:

http://wiki.eclipse.org/EclipseLink/Examples/JPA/QueryOptimization