如何在EJBQL中将Integer转换为String

时间:2012-07-01 00:12:48

标签: ejbql

我有一个整数的实体

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

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

我尝试了这个查询:

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

但它不起作用。

3 个答案:

答案 0 :(得分:3)

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

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

一般来说,这就是Hibernate docs(14.10表达式)对演员说的内容:

  

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

     

cast(... as ...),其中第二个参数是Hibernate的名称   如果ANSI cast()和extract()是,则类型和提取(... from ...)   由底层数据库支持

答案 1 :(得分:3)

由于EJB3 EJBQL已被(几乎)替换为JPQL。在EJBQL中,根据JPQL中的http://docs.oracle.com/cd/E11035_01/kodo41/full/html/ejb3_langref.html,也没有CAST实体属性的功能。

就像我已经说过的那样,还有两个选择:

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

答案 2 :(得分:0)

您需要指定从表别名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功能后编辑了这个答案。