3

我有一个带有整数的实体

@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%'"

但它不起作用。

4

3 回答 3

3

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

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

一般来说,这就是Hibernate 文档(14.10 Expressions)在强制转换时所说的:

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

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

于 2012-07-01T11:07:42.910 回答
3

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

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

  1. 使用本机查询。
  2. 向实体添加特殊的转换方法。
于 2012-07-02T20:36:12.197 回答
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 函数后,我编辑了这个答案。

于 2012-07-01T00:41:44.483 回答