如何在将字符串列视为长列时使用 HIbernate 标准进行比较
How to compare using HIbernate criteria on a string column treating it as a long column
我正在开发一个用 java 编写的 Web 项目,该项目使用 Hibernate 从 Oracle 数据库访问数据。
我的数据库中有一个列名称 serial
,它被定义为 VARCHAR(12)
,尽管它只包含可以转换为 long
的值。我的意图是获取数字 fromNo
和 toNo
之间的所有连续剧(将它们视为数字)。我不能使用 Restrictions.between
因为 serial
列不是数据库中的数字。它在关联对象中也定义为 String
。现在我通过将数字范围转换为字符串列表并在列上执行 Restricitons.in
来实现要求(以一种丑陋的方式)。
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();
虽然我得到了想要的结果,但当用户未定义 toNo
并且工具需要从 fromNo
[=26 获取所有 serial
时,问题就出现了=]
我的问题是如何通过指定将 serial
列视为 long
而不是 String
的条件来编写一个我可以克服所有这些问题的休眠条件? (可能是某种铸造工艺?)
请尝试使用Restrictions.between。尝试将整数解析为字符串
criteria.add(Restrictions.between('serialNo',String.valueOf(listNosFrom),String.valueOf(listNosTo)));
您可以在注释为
的实体中添加新的 'long' 字段
@Formula("cast(serialNo as NUMBER(10,0))")
private int lSerialNo;
然后在 Restrictions
中使用新字段 lSerialNo
我正在开发一个用 java 编写的 Web 项目,该项目使用 Hibernate 从 Oracle 数据库访问数据。
我的数据库中有一个列名称 serial
,它被定义为 VARCHAR(12)
,尽管它只包含可以转换为 long
的值。我的意图是获取数字 fromNo
和 toNo
之间的所有连续剧(将它们视为数字)。我不能使用 Restrictions.between
因为 serial
列不是数据库中的数字。它在关联对象中也定义为 String
。现在我通过将数字范围转换为字符串列表并在列上执行 Restricitons.in
来实现要求(以一种丑陋的方式)。
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();
虽然我得到了想要的结果,但当用户未定义 toNo
并且工具需要从 fromNo
[=26 获取所有 serial
时,问题就出现了=]
我的问题是如何通过指定将 serial
列视为 long
而不是 String
的条件来编写一个我可以克服所有这些问题的休眠条件? (可能是某种铸造工艺?)
请尝试使用Restrictions.between。尝试将整数解析为字符串
criteria.add(Restrictions.between('serialNo',String.valueOf(listNosFrom),String.valueOf(listNosTo)));
您可以在注释为
的实体中添加新的 'long' 字段 @Formula("cast(serialNo as NUMBER(10,0))")
private int lSerialNo;
然后在 Restrictions
lSerialNo