2011-01-25 62 views
35

我需要使用HQL,兩者都具有共同的列來組合2個表,但table1公共列是integertable2公共列是String如何用cast來編寫hql查詢?

例如,

select a.id as id,a.name as name,b.address as address 
from Personal as a,Home as b 
where a.id=b.studid 

這裏a.id被一個integerb.stduidstring,但兩列的數據是相同的。

如何使用hql查詢得到查詢結果?

回答

2

只要注意到您正在使用JPA,那麼您不能轉換或轉換數據。在查詢語言中,只能比較相同類型的值!在http://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html#bnbvu

+0

是的我的查詢是錯誤的,但我需要使用hql cast這個查詢的結果...是否有可能? – ver 2011-01-25 08:52:58

+0

我認爲它只能在休眠狀態下使用,但是您使用的是JPA? @axtavt給你的鏈接到休眠文檔錯誤,我是嗎? – Eduard 2011-01-26 12:50:53

55

HQL閱讀支持CAST(如果底層的數據庫支持的話),你可以用它:

select a.id as id,a.name as name,b.address as address 
from Personal as a,Home as b 
where cast(a.id as string) = b.studid 

參見:

+1

對於演員而言,在spring-data-jpa提供的`@ Query`註釋中使用HQL時,必須使用完全限定的類名稱(例如`java.lang.String`)。 – 2017-03-26 14:06:39

6

你真的需要思考爲什麼你需要加入兩個enti通過不同類型的屬性關係。這很可能意味着某些實體需要重構,這可能包括更改基礎數據庫表的列的數據類型。如果模型是正確的,就不需要扭曲Hibernate。