如何使用强制转换编写hql查询?

时间:2011-01-25 08:32:08

标签: java hibernate hql

我需要使用hql组合2个表,两个表都有公共列,但table1公共列是integertable2公共列是String

例如,

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.idinteger,而b.stduidstring,但两列的数据相同。

如何使用hql查询获取查询结果?

4 个答案:

答案 0 :(得分:61)

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 :(得分:6)

你真的需要思考为什么你需要通过不同类型的属性加入两个实体。很可能它表明某些实体需要重构,这可能包括更改基础数据库表的列的数据类型。如果模型正确,则无需扭转Hibernate。

答案 2 :(得分:2)

刚刚注意到您正在使用JPA,在那里您无法转换或转换数据表。在查询语言中,只能比较相同类型的值!阅读http://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html#bnbvu

答案 3 :(得分:1)

我必须像这样将其转换为String:

 @Query( value = "select new com.api.models.DResultStatus("+
            "cast(ds.demoId as java.lang.String),cast(ds.comp as java.lang.String),cast(ds.dc as java.lang.String),cast(be.buildUrl as java.lang.String)")