如何使用 cast 编写 hql 查询?
Posted
技术标签:
【中文标题】如何使用 cast 编写 hql 查询?【英文标题】:How do I write hql query with cast? 【发布时间】:2011-06-15 01:09:25 【问题描述】:我需要使用 hql 合并 2 个表,两者都有公共列,但 table1
的公共列是 integer
和 table2
的公共列是 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.id
是integer
而b.stduid
是string
,但是两列的数据是相同的。
如何使用 hql 查询得到查询结果?
【问题讨论】:
【参考方案1】:我不得不像这样将它转换为字符串:
@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)")
【讨论】:
【参考方案2】:您确实需要考虑为什么需要通过不同类型的属性连接两个实体。它很可能表明需要重构一些实体,其中可能包括更改基础数据库表的列的数据类型。如果模型正确,则无需扭曲 Hibernate。
【讨论】:
虽然选角会在短期内解决您的问题,但我认为 01es 是有道理的。当您需要转换 ID 时,似乎出了点问题。 我在堆栈溢出中看到了这些类型的非答案。一方面,01es 关于模型最有可能被破坏的观点可能是正确的。另一方面,大多数现实世界的系统都不是一蹴而就的。【参考方案3】: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
另请参阅:
16.10. Expressions【讨论】:
【参考方案4】:刚刚注意到您正在使用 JPA,在那里您无法转换或转换数据类型。在查询语言中,只能比较相同类型的值!阅读http://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html#bnbvu
【讨论】:
是的,我的查询是错误的,但我需要使用 hql cast 进行此查询的结果...有可能吗? 我认为它只能在休眠中使用,但您使用的是 JPA? @axtavt 为您提供了指向休眠文档的链接,这是错误的,我对吗?以上是关于如何使用 cast 编写 hql 查询?的主要内容,如果未能解决你的问题,请参考以下文章