【发布时间】:2017-02-03 11:01:04
【问题描述】:
我正在尝试使用 JPA 2.0 执行本机查询。我在 orm.xml 中定义了我的本机查询
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>
我使用 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();
此查询在执行时不会引发任何异常我验证了我的应用程序的 jpa 日志但返回给我空结果集。
当我在我的数据库服务器中触发相同的查询时,我得到的结果集证明我的查询没有问题,并且表还保存了针对该查询返回的记录。
我试图打破我的本机查询并简单地将它们作为单独的本机查询执行我在查询中拥有的所有表。
下面是我尝试使用 DISTINCT 子句来检查 DISTINCT 关键字是否是罪魁祸首。但他们都工作得很好,并在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
更新了我在查询中传递的角色和 cccRoles 查询参数。
roles = 'teller','lender','bacth',etc... // This list is dynamically created at runtime
cccRoles = 'cccadmin','ccuser',etc // This list is dynamically created at runtime
现在我不确定是什么问题。
查询? - 不应该像我验证的那样直接在数据库服务器中运行相同的查询并且运行良好。
实体管理器(JPA)? - 验证所有配置并执行上述个别查询并返回结果。
加入?...
如果有人在使用 WAS 8.5、JPA 2.0 时遇到同样的问题,请帮助我。
【问题讨论】:
-
尝试跟踪查询。即:
alter session set events '10046 trace name context forever , level 12';
标签: java oracle jpa jpa-2.0 nativequery