1
SELECT * 
FROM 
  CUSTOMER_MASTER t0, 
  (SELECT t1.COMMNUMBER, t1.COMMTYPE FROM FOLLOWUP_GUIDES t1 WHERE (t1.STAGE_ID = '5')) t2
WHERE (t0.FOLL_UP_NUM = t2.COMMNUMBER 
and T0.FOLL_UP_TYPE=t2.COMMTYPE AND (t0.COMPANY_ID = 'C001'))

上記の oracle クエリでは、commnumber と commtype の組み合わせで follupnum と folluptype を取得する必要があります。しかし、このクエリをJPAで書くことは可能ですか?

4

3 に答える 3

1

JPAはSQLクエリを完全にサポートしています。createNativeQuery(sql)または@NamedNativeQueryを使用できます。

おそらく、JPQLの観点からクエリを言い換えることもできます。

EclipseLinkを使用している場合、JPQLのFROM句で副選択をサポートします。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#Sub-selects_in_FROM_clause

于 2012-10-31T14:08:23.030 に答える
1

JPAはSQLクエリを完全にサポートしています。createNativeQuery(sql)または@NamedNativeQueryを使用できます

このリンクをクリックしたら

于 2013-02-21T06:31:58.173 に答える
0

CUSTOMER_MASTER と FOLLOWUP_GUIDES の間に外部キーがあるとします。

すなわち仮定

CUSTOMER_MASTER.FOLL_UP_NUM    is FK to   FOLLOWUP_GUIDES.COMMNUMBER 
CUSTOMER_MASTER.FOLL_UP_TYPE   is FK to   FOLLOWUP_GUIDES.COMMTYPE

次に、クエリ

SELECT * 
FROM 
  CUSTOMER_MASTER t0, 
  (SELECT t1.COMMNUMBER, t1.COMMTYPE FROM FOLLOWUP_GUIDES t1 
   WHERE (t1.STAGE_ID = '5')) t2
WHERE (t0.FOLL_UP_NUM = t2.COMMNUMBER 
and T0.FOLL_UP_TYPE=t2.COMMTYPE AND (t0.COMPANY_ID = 'C001'))

と同等です

SELECT t0.*
FROM CUSTOMER_MASTER t0 JOIN FOLLOWUP_GUIDES t1
WHERE t0.COMPANY_ID = 'C001'
AND   t1.STAGE_ID = '5'

これは JPA で非常に簡単に実行でき、この SQL と非常によく似ています (テーブル名と属性名の代わりにオブジェクト名とフィールド名のみを使用)。

JPA JPQL クエリは次のようになります。

SELECT t0
FROM CustomerMaster t0 JOIN FollowupGuides t1
WHERE t0.companyId = "C001"
AND   t1.stageId = "5"

JPA サブクエリでも実行できます。

SELECT t0
FROM CustomerMaster t0 
WHERE t0.companyId = "C001"
AND   EXISTS (SELECT 1
              FROM FollowupGuides t1
              WHERE t1.commnumber = t0.follUpNum
              AND   t1.commtype = t0.FollUpType
              AND   t1.stageId = "5")

=B)

于 2012-11-02T03:52:45.303 に答える