Mat*_*mes 5 java database hibernate jpa h2
我们使用 H2 数据库进行测试,但是当我使用 Hibernate 将 BigDecimal 值存储到其中然后将其加载回时,该值会被截断为两位小数:
字段定义如下所示
@Column(name = "Rate", nullable = true)
private BigDecimal rate;
Run Code Online (Sandbox Code Playgroud)
所以 1.456 被截断为 1.46。
我不知道预先的精度(每个实体都不同),所以我无法在注释上定义它们。
有没有办法解决这个问题?
即使您事先不知道精度/比例,我认为您仍然需要在注释中定义最大精度和比例@Column
。您需要查看生成的数据库模式以了解 Hibernate 如何定义列。
顺便说一句,我可以告诉您,BigDecimal
从数据库返回的值的创建是由专有的 JDBC 驱动程序对getBigDecimal
特定于数据库的ResultSet
子类的方法的实现完成的。
我通过使用调试器逐步浏览 Hibernate 源代码发现了这一点,同时试图找到我自己问题的答案。
似乎该getBigDecimal
方法的某些实现要么使用数据库模式中定义的精度/比例,要么尝试BigDecimal
通过仅定义保存检索值所需的最小精度/比例来优化返回值。
另请参阅我的问题here和this other question。
归档时间: |
|
查看次数: |
4774 次 |
最近记录: |