jpa本机查询不返回所有值

时间:2016-01-20 08:30:57

标签: java postgresql jpa

我正在使用jpa本机查询,但它没有从salias返回值,而是从S

返回值
Query query = em.createNativeQuery("Select S.\"MESSAGE\",S.\"DESTINATION\",S.\"SENT_DATE\",S.\"CLIENT_TRACKING_ID\",S.\"MESSAGE_COST\",S.\"sTId\",salias.\"STATUS\",salias.timeDate from \"sent_sms_view\" S left join ( Select Distinct on (\"SMS_ID\") R.\"SMS_ID\",R.\"STATUS\",R.timeDate from \"sms_receipt_view\" R  Order By R.\"SMS_ID\",R.timeDate Desc)As salias on S.\"SYSTEM_TRACKING_ID\"=salias.\"SMS_ID\" where S.Id_systemUser=:systemUser and S.\"CLIENT_TRACKING_ID\"=:cTId");

        query.setParameter("cTId", cTId);
        query.setParameter("systemUser", systemUser);
        if (query.getResultList().size() > 0){
        List<Object> resultat = query.getResultList();

这是Postgres查询,它工作正常

Select S."MESSAGE",S."DESTINATION",S."SENT_DATE",S."CLIENT_TRACKING_ID",S."MESSAGE_COST",S."sTId" ,salias."STATUS",salias.timeDate
from "sent_sms_view" S
left join ( Select Distinct on ("SMS_ID") R."SMS_ID",R."STATUS",R.timeDate from "sms_receipt_view" R  Order By R."SMS_ID",R.timeDate Desc)As salias
on S."SYSTEM_TRACKING_ID"=salias."SMS_ID"
where S.Id_systemUser='101' and S."CLIENT_TRACKING_ID" ='abda';

任何人都可以告诉我我做错了什么。

1 个答案:

答案 0 :(得分:0)

我只是猜测你可能会做什么,因为你还没有告诉我们,但是我猜测它应该是这样的:

SELECT S."MESSAGE", S."DESTINATION", S."SENT_DATE", S."CLIENT_TRACKING_ID", S."MESSAGE_COST", S."sTId", salias."STATUS", salias.timeDate
FROM "sent_sms_view" S
INNER JOIN "sms_receipt_view" AS salias on (S."SYSTEM_TRACKING_ID" = salias."SMS_ID")
WHERE S.Id_systemUser=:systemUser AND S."CLIENT_TRACKING_ID"=:cTId

但是,我不明白为什么你会有数字ID,例如Id_systemUser存储为字符串。事实上,变量名称表示可怕的数据库设计。 CamelCasing与下划线相结合是您必须明确避免的事情。

如果您正在寻找相同的结果,则绝不能两次致电query.getResultList()。只需将List存储到本地变量,然后使用它。