PostgreSQL中BigDecimal转double precision报错,如何在原生SQL中转换?
解决PostgreSQL中BigDecimal转double precision的更新报错
问题根源是实体类用BigDecimal类型映射数据库的double precision列时,JPA绑定参数未自动完成类型转换,导致PostgreSQL将传入参数识别为bytea类型,与列类型不匹配。
在原生SQL中通过显式类型转换即可解决,有两种常用实现方式:
方式一:使用PostgreSQL原生类型转换操作符::
修改后的Repository方法代码如下:
@Modifying @Query(value="update words set low_range = :lowRange::double precision, high_range = :highRange::double precision where keyword = :keyword", nativeQuery = true) int updateByKeyword(@Param("keyword") String keyword, @Param("lowRange") BigDecimal lowRange, @Param("highRange") BigDecimal highRange);
方式二:使用SQL标准CAST函数
也可以通过标准CAST语法实现类型转换:
@Modifying @Query(value="update words set low_range = CAST(:lowRange AS double precision), high_range = CAST(:highRange AS double precision) where keyword = :keyword", nativeQuery = true) int updateByKeyword(@Param("keyword") String keyword, @Param("lowRange") BigDecimal lowRange, @Param("highRange") BigDecimal highRange);
额外注意点
你的原生SQL中表名写为processed_words,但实际数据库表是words,这会触发表不存在的错误,必须同步修正表名。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

