java - 如何使用 Criteria 查询将 String 字段转换为 where 子句中的数字?

标签 java hibernate jpa criteria-api

我使用 Criteria API 来创建查询,并使用 Hibernate 作为实现。数据库是MS SQL Server 2014。

在我的数据库中,我有一个字符串字段,其中包含数字和字符串。我想将数字与数值进行比较。 在 SQL 中,它会是这样的:

select *
from table
where ISNUMERIC(table.value) and CONVERT(float, table.value) > 5

(不要在函数名称上引用我。)在 Criteria 查询中似乎没有直接的方法来执行此操作,因此我尝试使用 function() 方法:

Expression<Float> convertedExpression = criteria.function("CONVERT", Float.class, criteria.literal(Float.class), baseExpression);

但是这种方法给出了一些无用的错误消息,例如“靠近 ) 的语法不正确”或“@P1 附近的语法不正确”。我认为这是因为传递给该方法的第一个参数,它必须是我想要转换为的类型。

任何帮助使 CONVERT 函数正常工作或完全不同的方法将不胜感激。

最佳答案

将您的列建模为字符串 - 这样您就可以依靠条件 api 来转换为字符串。如果您期望特定的格式 - 这样做 - 我的意思是将您的 float 格式化为特定的字符串,并将其传递给条件。

关于java - 如何使用 Criteria 查询将 String 字段转换为 where 子句中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37007604/

相关文章:

Java解压奇怪的字符(编码?)

java - Spring 启动: only discover JPA entity in test profile

hibernate - Kotlin 与 JPA/Hibernate : no lazy-loading without `open` ?

spring - @Scheduled + Hibernate -> LazyInitializationException

hibernate - 从hql到sql的错误翻译

java - hql 与 @CollectionTable 联接

java - 在@OneToMany JPA集合中使用Where子句

java - 如何使用PowerMock测试方法Jsoup.connect(静态)?

java - 调试时遇到问题 - 空集

java - JXTable java.lang.IndexOutOfBoundsException : Invalid range