Java 如何在字符串列上使用HIbernate条件将其视为长列进行比较

Java 如何在字符串列上使用HIbernate条件将其视为长列进行比较,java,hibernate,criteria,hibernate-criteria,Java,Hibernate,Criteria,Hibernate Criteria,我正在从事一个用java编写的web项目,该项目使用Hibernate从oracle数据库访问数据 我的数据库中有一个列名serial,它被定义为VARCHAR(12),即使它只包含可以转换为long的值。我的目的是获取编号fromNo和toNo之间的所有序列(将它们视为数字)。我无法使用限制。介于之间,因为序列列不是DB中的数字。它在关联对象中也定义为String。现在,我通过将数字范围转换为字符串列表并在列中执行限制来达到要求(以一种丑陋的方式) long fromNO = 10; long

我正在从事一个用java编写的web项目,该项目使用Hibernate从oracle数据库访问数据

我的数据库中有一个列名
serial
,它被定义为
VARCHAR(12)
,即使它只包含可以转换为
long
的值。我的目的是获取编号
fromNo
toNo
之间的所有序列(将它们视为数字)。我无法使用
限制。介于
之间,因为
序列
列不是DB中的数字。它在关联对象中也定义为
String
。现在,我通过将数字范围转换为字符串列表并在列中执行
限制来达到要求(以一种丑陋的方式)

long fromNO = 10;
long toNo = 100;
List<String> listNos = null;
for (long k = fromNo; k <=toNO; k++) {
    listNos.add(k.toString());
}

Criteria criteria = getMyHibernateSession().createCriteria(MyObject.class);
criteria.add(Restrictions.in('serialNo',listNos));
List<MyObject> results = criteria.list();
long fromNO=10;
长托诺=100;
列表listNos=null;

对于(长k=fromNo;k请尝试使用Restrictions.between。尝试将整数解析为字符串

criteria.add(Restrictions.between('serialNo',String.valueOf(listNosFrom),String.valueOf(listNosTo)));

您可以在实体中添加新的“长”字段,并将其注释为

    @Formula("cast(serialNo as NUMBER(10,0))")
    private int lSerialNo;

然后在
限制中使用新字段
lSerialNo

这是如何处理空值的?