我有一个整数的实体
@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%'"
但它不起作用。
答案 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实体属性的功能。
就像我已经说过的那样,还有两个选择:
答案 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功能后编辑了这个答案。