JPA 将 BigDecimal 转换为字符串

Posted

技术标签:

【中文标题】JPA 将 BigDecimal 转换为字符串【英文标题】:JPA Cast BigDecimal as string 【发布时间】:2022-01-23 20:44:13 【问题描述】:

我正在使用 JPA 查询数据库,但发生了一些奇怪的事情。在某些情况下,演员表可以正常工作并编译,但使用 BigDecimal 它不允许我使用演员表来制作带有字符串的 LIKE。以下是部分有效的代码:

"AND cast(pe.pesoObjetivo as string) LIKE :pesoObjetivo% "

pesoObjetivo 是一种数据类型 Double

@Column(name = "peso_objetivo")
    private Double pesoObjetivo;

但是当我尝试使用

执行查询时
"AND cast(pe.pesoPregestacional) LIKE :pesoPregestacional% " +

pesoPregestacional 是一个 BigDecimal

 @Column(name = "peso_pregestacional", precision = 21, scale = 2)
    private BigDecimal pesoPregestacional;

我收到以下错误

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ) near line 1, column 701

以及我的其余查询 在 JPA 中,我如何使用字符串对 BigDecimal 数据进行 LIKE 操作?或者我的错误是什么? 通过注释掉这行代码或使用

"AND pe.pesoPregestacional = :pesoPregestacional% " +

一切正常,只是不是我想要的。很明显,错误就在这句话中

【问题讨论】:

喜欢数字数据类型总是感觉有点奇怪。你为什么要这么做? 为了从FrontEnd做一个过滤器,如果你传入一个空字符串,它不会被考虑,但是如果你写一个值,它会在表中寻找它对应的值具有相同的数据类型。 【参考方案1】:

你错过了字符串:

错误

"AND cast(pe.pesoPregestacional) LIKE :pesoPregestacional% " +

正确

"AND cast(pe.pesoPregestacional as string) LIKE :pesoPregestacional% " +

【讨论】:

你说得对,我没有意识到我错过了那句话。非常感谢!

以上是关于JPA 将 BigDecimal 转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将 BigDecimal 转换为指数形式?

BigDecimal类的用法

BigDecimal,精度和规模

Talend 从字符串转换为 bigdecimal

将特定于语言环境的字符串转换为 BigDecimal 的最佳方法

如何将“24cd2ec2-6674-4aa2-a761-1b0a953124ba”(字符串对象)转换为 BigDecimal [关闭]