java - 如何在字符串列上使用 HIbernate 标准进行比较,将其视为长列

标签 java hibernate criteria hibernate-criteria

我正在开发一个用 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 获取所有 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/

相关文章:

spring - applicationcontext.xml 和 .hbm 文件放在哪里?

hibernate - 可以将 Map 对象传递给 HQL

java - 连接管理器 : pool of connection

java - 在映射到非主键 Spring JPA 期间,referencedColumnNames 未映射到单个属性错误

java - KieScanner 无法从自定义 Maven 存储库获取最新的 Jars - Maven - 3.6.3

java - 使用 Hibernate Criteria 和 Oracle 处理时间的更好方法是什么?

Hibernate——条件与命名查询

java - 如何使用不同类中的 where 属性编写连接两个表的规范

java - 架构组件 : How does the ViewModelProvider know which constructor to call?

java - 无法使用 adal4j Api 获取 Azure token