1

JPA と JPQL で完全な結合クエリを RDBMS に渡すにはどうすればよいですか? 例えば、

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

次の従業員クラスで

@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 は、関連付けられたフィールド「アドレス」をトラバースできないと叫びます。

もしそうなら、どのように従業員エンティティを設計し、eclipselink が両方のテーブルで WHERE フィルターを使用してテーブル結合を実行するために JPQL をどのように表現する必要がありますか?

(暴言:そうでなければ、Eclipselink JPAはJDOに勝るものはありません!!!)

さらに編集:この投稿は私の場合に何か意味がありますか....
https://forums.oracle.com/forums/thread.jspa?threadID=1568659

4

1 に答える 1

1

問題は、JPQL 仕様に従って許可されていない結合フェッチをエイリアスしようとしていることです。とにかく、Hibernate はこれを許可します。問合せヒントを使用して、EclipseLinkで目的の動作を取得できます。

次の投稿をご覧ください。

次のリンクも役立ちます。

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

于 2012-07-24T22:59:35.387 に答える