如何在将字符串列视为长列时使用 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 的值。我的意图是获取数字 fromNotoNo 之间的所有连续剧(将它们视为数字)。我不能使用 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