【问题标题】:Cast function for HibernateHibernate 的强制转换函数
【发布时间】:2009-11-04 19:22:12
【问题描述】:

我尝试从数据库字段中的字符串转换为浮点数,以与其他数字进行比较。数据库中的字段为字符串类型。我尝试在 where 语句中使用使用 cast() 作为“cast(field, float) BETWEEN 1.003 AND 100.00)”的 BETWEEN 标准。但是,它没有帮助。

但是,当我尝试在没有 Hibernate 的情况下直接对数据库执行常规查询时,它可以正常工作为“SELECT * FROM table WHERE cast(field as float) BETWEEN 1.003 AND 100.00”

我已经尝试过“.. WHERE cast(field as float) > 1.003 AND cast(field as float)

我找到了几个博客或表格,但没有帮助。

https://forum.hibernate.org/viewtopic.php?p=2399159

你有什么想法或意见吗?

如果您能给我一些指示,我将不胜感激。

谢谢

老虎

【问题讨论】:

    标签: sql hibernate type-conversion casting


    【解决方案1】:
    1. 您是否从 Hibernate 收到非法语法异常或数据库错误?可以发一下吗?
    2. 您使用的是什么数据库?内部是否支持cast()
    3. 您是否尝试过不使用 cast() 进行比较?一些(实际上是大多数)数据库支持隐式类型转换

    【讨论】:

    • 1.它不会从 Hibernate 抛出任何异常或任何错误。它显示了错误的列表数据。 2. PostgreSQL 8.3。在 PostgreSQL 中,它直接使用 cast() 工作。在休眠状态下,它不起作用并执行了上述(1)。 3. 我用我们的 cast() 做了,它没有通过结果。它显示“运算符不存在:字符变化>数字”。如果您需要任何进一步的信息,请告诉我
    • 我明白了。 BETWEEN 实际上不是< and > 而是<= and >=。其次,Hibernate 的 Postgres 方言将“float”映射到“float4”,由于它是浮点数,比较起来可能相当棘手;考虑将其转换为数字。最后,能否在 Hibernate 中打开 SQL 输出,查看实际生成的是什么查询?如果差异不是由包容性与独占性大于/小于引起的,则它一定是由于查询发生了某些事情。
    • 问题是当我使用强制转换为数字时,Hibernate 会抛出 NullPointerException。所以我创建了一个新的 PostgreSQLDialect,它将 FLOAT 类型注册为 float 而不是 float4。它现在可以正常工作。谢谢你。 :)
    猜你喜欢
    • 2021-03-13
    • 2012-01-10
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多