2016-01-20 77 views
0

我使用JPA本机查询所有的值,但它不是从salias返回值是选自SJPA本机查询不返回

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

为什么在查询中使用引号? – Makoto

+0

数据库中有coloumns这就是为什么..我不能改变数据库结构@Makoto – kirti

+0

您的查询中的引号与数据库无关,除非列使用保留关键字,我不相信它们是.. – Makoto

回答

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存储到本地变量,然后使用它。