0

これは、OpenJPAを使用して再作成しようとしているOracleクエリです。私はWebsphere統合開発者でサービスを作成しており、選択したORMツールとしてOpenJPAを使用しています。以前は、このクエリはストアドプロシージャを使用して実行され、参照カーソルが使用され、そのように情報が取得されていました。現在、選択したツールとしてOpenJPAを使用しようとしています。したがって、OpenJPAを使用してストアドプロシージャを再構築する必要があると考えています...

SELECT DISTINCT
   P.col1 as ID,
   P.col2,
   P.col3,
   P.col4,
   P.col5,
   S.col6,
   PC.col7,
   P.col8,
   A.ADDRESS_1,
   A.ADDRESS_2,
   A.ADDRESS_3,
   A.CITY,
   A.COUNTY,
   A.STATE,
   A.ZIP_CODE,
   P.CONFIRMED_BY,
   P.CONFIRMED_DATE,
   P.MOD_USERID,
   P.MOD_DATE
FROM   EPCD13.PROVIDER P, EPCD13.provider_channel PC, EPCD13.provider_channel_link pcl,
   EPCD13.provider_specialty ps, EPCD13.SPECIALTY S, EPCD13.Address A, EPCD13.ADDRESS_LINK AL
WHERE P.RESOURCE_ID = personID
  AND P.RESOURCE_ID = PS.RESOURCE_ID (+)
  AND 1 = PS.PRIMARY_SPECIALTY_ID (+)
  AND PS.SPECIALTY_ID = S.SPECIALTY_ID (+)
  AND P.RESOURCE_ID = PCL.RESOURCE_ID (+)
  AND PCL.PROVIDER_CHANNEL_ID = PC.PROVIDER_CHANNEL_ID
  AND 1 = PCL.PREFERENCE (+)
  AND 9 = pc.channel_type_id (+)
  AND PC.CHANNEL_ADDRESS NOT LIKE '%@%'
  AND P.RESOURCE_ID = AL.RESOURCE_ID (+)
  AND AL.ADDRESS_ID = A.ADDRESS_ID (+)
  AND 1 = A.ADDRESS_TYPE_ID (+) 
  AND 1 = AL.PREFERENCE (+);

これらすべての内部結合などに注意してください。私は今、上記と同じ結果を返す名前付きクエリを1つのメソッドに入れることを考えています。お気づきかもしれませんが、そこで呼び出され、さまざまなポイントで結合されている複数のテーブルがあります...小さな変更を加えてこのクエリをcreateNamedQuery()関数に入れることができると思います...しかし、そうしなければならないと思いますこれを行うためのより簡単な方法でしょうか?そうでないかもしれない。JPAを使用してストアドプロシージャを呼び出すことはできますか?

4

2 に答える 2

1

SQL は非常に複雑であるため、JPQL に変換するのは簡単ではありません。そのままにしておくことをお勧めします。SQLクエリができるOpenJPAのNativeQueryを利用できます。SQL が SELECT で開始されていない場合、ストアド プロシージャとして扱われます。

于 2012-04-13T03:34:57.893 に答える
0

テーブルごとに JPA エンティティを作成し、次のようにしてエンティティを結合でき ます 。http://openjpa.apache.org/builds/1.1.1-SNAPSHOT/docs/jpa_overview_mapping_full.html@OnetoMany and @ManytoOne and @ManytoManyいくつかのアイデアの例。

于 2012-05-17T18:43:19.717 に答える