2016-08-08 4 views
0

以下のコードを使用して、単一のNotificationSubTypeオブジェクトを取得しようとしました。しかし、 "org.apache.openjpa.persistence.ArgumentException:発生しました "のような例外を見つけることから" 文字1で、しかし予想: " [" DELETE " "SELECT"、" UPDATE]"JPAコンポジットプライマリキーを持つクエリで例外が発生する

することは、私を助けてください与えられた問題について。 コードは以下の通りです: ... ...

try { 

    Query query = this.em.createQuery("from NotificationSubType conc WHERE conc.id.alertTyC = ?1 and conc.id.alertSubTyC = ?2"); 

    query.setParameter(1, "MPPRINT"); 
    query.setParameter(2, "REIN"); 

    NotificationSubType trackIdResLst = (NotificationSubType)query.getSingleResult(); 

    if (null != trackIdResLst) { 
     System.out.println("TRUE"); 
    } else{ 
     System.out.println("FALSE"); 
    } 
} catch (Exception e) { 
    NotificationLogger.errorWithThrowable(e); 
    throw new NotificationServiceException(e.getMessage()); 
} 

...

答えて

0

なぜ例外を読んでいませんか? JPAの仕様をお読みください。

JPQLステートメントは、SELECT,UPDATEまたはDELETEで始まる必要があります。それ以外は違法です(何らかの理由でFROMで始まります)。成功のより多くのチャンスのためにそれの前にSELECTと候補エイリアスを入れ

はいHibernate bastardises(あなたがプラスエイリアスSELECTを省略することを可能にする)が、あなたはOpenJPAはそうあなたがJPAを使用する必要が使用しているHQLと標準JPQLそれに加えて、標準に従うためにHibernateを使用するときでさえ、良い練習になるでしょう!

+0

大変ありがとうございます。私もselectで試しました。 "select * from NotificationSubType"のような単純なselectクエリで成功を収めていますが、 "select * from NotificationSubType conc where conc.id.alertTyC =?1 and conc.id.alertSubTyC =?2"のような条件を追加しているときは、 。 Open JPAで条件付き選択クエリを構成するために必要なものはありますか? –

+0

私が言ったように... JPA仕様を読んでください。 JPQLでは "SELECT *"を実行することはできません! "SELECT conc FROM NotificationSubType conc"はJPQL!です。 JPAでランダムにSQLを投げるのではなく、ドキュメントを読んでください。 JPQL!= SQL –

関連する問題