我正在开发一个用 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 获取所有
serial
时,就会出现问题
我的问题是如何编写一个 hibernate 标准来克服所有这些问题,通过指定标准将 serial
列视为 long
而不是 String
? (可能是某种类型转换过程?)
最佳答案
您可以在实体中添加新的“长”字段,注释为
@Formula("cast(serialNo as NUMBER(10,0))")
private int lSerialNo;
然后在您的限制
中使用新字段lSerialNo
关于java - 如何在字符串列上使用 HIbernate 标准进行比较,将其视为长列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31698121/