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

ver*_*ver 38 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
Run Code Online (Sandbox Code Playgroud)

这里a.id是一个integer同时b.stduid是一个string,但两列的数据是一样的.

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

axt*_*avt 67

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 
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 对于强制转换,在spring-data-jpa提供的@Query批注中使用HQL时,我必须使用完全限定的类名(例如,java.lang.String)。 (2认同)

01e*_*1es 6

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

  • 我在堆栈溢出中看到了这些类型的非答案。一方面,01es 关于模型最有可能被破坏的说法可能是正确的。另一方面,大多数现实世界的系统都不是一蹴而就的。 (3认同)

Alf*_*bel 5

我必须像这样将它转换为 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)")
Run Code Online (Sandbox Code Playgroud)


Edu*_*ard 3

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