2011-01-25 72 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。