【问题标题】:How do I write hql query with cast?如何使用 cast 编写 hql 查询?
【发布时间】:2011-06-15 01:09:25
【问题描述】:

我需要使用 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.idintegerb.stduidstring,但是两列的数据是相同的。

如何使用 hql 查询得到查询结果?

【问题讨论】:

    标签: java hibernate 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 
      

      另请参阅:

      【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 是的,我的查询是错误的,但我需要使用 hql cast 进行此查询的结果...有可能吗?
      • 我认为它只能在休眠中使用,但您使用的是 JPA? @axtavt 为您提供了指向休眠文档的链接,这是错误的,我对吗?
      猜你喜欢
      • 2018-04-06
      • 2016-01-17
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2016-09-22
      相关资源
      最近更新 更多