我得到了一个带有整数的实体
@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,也没有强制转换实体属性的功能。
所以就像我已经说过的,还剩下两个选择:
- 使用本机查询。
- 向实体添加特殊的强制转换方法。
您需要指定要从表别名 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函数后,我编辑了这个答案。