如何在 EJBQL 中将整数转换为字符串



我得到了一个带有整数的实体

@Entity(name=customer)
public Customer {
    ...
    @Column
    private int number;
    ...
    //getter,setter
}

现在我想在查询中强制转换此整数以将其与其他值进行比较。

我尝试了这个查询:

"SELECT c FROM customer c WHERE CAST(c.number AS TEXT) LIKE '1%'"

但它不起作用。

这适用于我使用 Hibernate 的一些代码:

SELECT c FROM customer c WHERE STR(c.number) LIKE '1%'

一般来说,这是Hibernate文档(14.10表达式)对投射的看法:

str() 用于将数值或时态值转换为可读字符串

演员表(...如...),其中第二个参数是休眠的名称 类型,并提取(...从...如果 ANSI cast() 和 extract() 是 受基础数据库支持

自从 EJB3 以来,EJBQL 已经(几乎)被 JPQL 取代。在 EJBQL 中,根据 JPQL 中的 http://docs.oracle.com/cd/E11035_01/kodo41/full/html/ejb3_langref.html,也没有强制转换实体属性的功能。

所以就像我已经说过的,还剩下两个选择:

  1. 使用本机查询。
  2. 向实体添加特殊的强制转换方法。

您需要指定要从表别名 c 中选择的列,并且由于 EJBQL 不支持强制转换函数,因此将字符串而不是文本传递到查询中。(这有效地允许程序在到达 EJBQL 之前执行强制转换。

下面的示例在 SQL Server 中,但应该会给你一个想法:

 declare @numberText as varchar(50)
 set @numberText = '1'
 SELECT c.CustomerNumber FROM customer c 
 WHERE c.CustomerNumber  LIKE @numbertext + '%'

所以而不是private int number使用private string numberText.

注意:在OP确认EJBQL不支持CAST函数后,我编辑了这个答案。

相关内容

  • 没有找到相关文章

最新更新