はParamertizedネイティブクエリ[カンマ区切りの文字列としてパラメータ](JPAを使用して)
Orm.xml
<named-native-query name="getAgencyUsersByRoles">
<query><![CDATA[SELECT DISTINCT a1.USR_LOGIN,c.PERSON_FIRST_NAME,c.PERSON_LAST_NAME,a1.EMAIL, b.auth_role_code FROM USERS a1,PERSON_AUTH_ROLES b,PERSON c WHERE ((b.group_code = 'RCATAG' and a1.person_id=b.person_id and b.person_id=c.person_id AND b.auth_role_code IN (?)) OR (b.group_code = 'RCEMP' and a1.person_id=b.person_id and b.person_id=c.person_id AND b.auth_role_code IN (?))) AND a1.email IS NOT NULL AND a1.status in ('ACTIVE','PASSWORD EXPIRED') ORDER BY a1.usr_login]]></query>
</named-native-query>
orm.xmlで私のネイティブクエリを定義していますjpaを使用してクエリを実行している場所のコード。
Query query = getEntityManager()
.createNamedQuery(NotificationPersistenceConstants.GET_AGENCY_USERS_BY_ROLES);
query.setParameter(1, roles);
query.setParameter(2, cccRoles);
// fetch the results
List<Object[]> list = query.getResultList();
は、このクエリは、私は私のappplicationのJPAのログを確認し、実行しながら、任意の例外がスローされますが、私は空の結果を返していません。
DBサーバーで同じクエリを実行すると、クエリに問題がないことを証明する結果セットが得られます。テーブルには、このクエリに対するレコードが返されます。
私は自分のネイティブクエリを壊して、クエリ内にあるすべてのテーブルに対して別々のネイティブクエリとしてそれらを実行しようとしました。 以下は、DISTINCTキーワードが原因である可能性があるかどうかを確認するためにDISTINCT句で試したことです。しかし、彼らはすべての良い仕事をし、私は、クエリに渡していた役割& cccRolesのクエリーパラメータを更新しましたList<Object[]>
SELECT DISTINCT a1.USR_LOGIN FROM USERS a1 ORDER BY a1.usr_login
SELECT DISTINCT b.auth_role_code FROM PERSON_AUTH_ROLES b
SELECT DISTINCT c.PERSON_LAST_NAME FROM PERSON c
の下で結果を与えました。
roles = 'teller','lender','bacth',etc... // This list is dynamically created at runtime
cccRoles = 'cccadmin','ccuser',etc // This list is dynamically created at runtime
ここでは何が問題なのかよくわかりません。
クエリ? - 私はDBサーバーで直接同じクエリを実行し、良い仕事を確認したとしてはいけません。
EntityManager(JPA)? - すべての設定を検証し、前述の個々のクエリを実行し、結果を戻しました。誰もが8.5、JPA 2.0 WAS使用して、同じ問題に遭遇した場合
は?参加...私を助けて
してください。
クエリをトレースしてみます。例: 'セッションセットイベントを変更する '10046トレース名コンテキストを永遠に、レベル12';' –