java-使用Hibernate将BigDecimal存储到H2中时丢失精度
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-使用Hibernate将BigDecimal存储到H2中时丢失精度,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含886字,纯文字阅读大概需要2分钟。
内容图文
![java-使用Hibernate将BigDecimal存储到H2中时丢失精度](/upload/InfoBanner/zyjiaocheng/658/98c92a21146e41938f04687dd8ac57a5.jpg)
我们将H2数据库用于测试目的,但是当我使用Hibernate将BigDecimal值存储到该数据库中,然后将其加载回时,该值将被截断为两位小数位:
字段定义如下所示
@Column(name = "Rate", nullable = true)
private BigDecimal rate;
因此1.456被截断为1.46.
我不知道预先的精度(每个实体都不同),所以我无法在注释中定义它们.
有什么办法可以解决这个问题?
解决方法:
即使您不预先知道精度/小数位数,我认为您仍然需要在@Column批注中定义最大精度和小数位数.您需要查看生成的数据库架构,以了解Hibernate如何定义该列.
顺便说一句,我可以告诉您,从数据库返回的BigDecimal值的创建是通过专有JDBC驱动程序对数据库特定ResultSet子类的getBigDecimal方法的实现来完成的.
我通过尝试使用调试器逐步进入Hibernate源代码,而试图找到my own question的答案时发现了这一点.
似乎getBigDecimal方法的某些实现将使用数据库模式中定义的精度/小数位数,或者将尝试通过仅定义保持所检索值所需的最小精度/小数位数来优化返回的BigDecimal.
另请参见my question here和此other question.
内容总结
以上是互联网集市为您收集整理的java-使用Hibernate将BigDecimal存储到H2中时丢失精度全部内容,希望文章能够帮你解决java-使用Hibernate将BigDecimal存储到H2中时丢失精度所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。