java - BigDecimal 与 JPA 和灵活的规模
问题描述
我必须BigDecimal
在 JPA 中映射一个:
@Column(name = "price", precision = 16, scale = 4)
private BigDecimal price;
精度和比例也在数据库中正确设置。
但是,对于给定的比例,所有值都以 4 的比例存储,即使该值只需要 2 的比例。例如,如果我使用如下数字:
12.12345678
然后这个值被截断为
12.1234
甚至精度也允许更高的比例为 4(因为允许的精度为 16,使用的精度为 6,因此 Hibernate 可以多存储 10 位数字,即使需要更高的比例也可以使用这些数字)。
有什么方法可以让休眠根据实际比例及其精度而不是硬编码比例来调整比例?如果我映射没有比例的 BigDecimal:
@Column(name = "price", precision = 16)
private BigDecimal price;
然后 Hibernate 默认为 2。是否有类似JPA中可用最大值的灵活比例?precision
因为在内部,BigDecimal 完全是这样的:如果没有给出比例(这是默认值),那么 java 会根据可用的精度调整所需的比例。
解决方案
在保存实体之前,您可能需要诸如@PrePersist @PreUpdate
注释之类的东西来修复您的BigDecimal
比例。
就像是:
@PrePersist
@PreUpdate
public void pricePrecisionConvertion() {
// convert your bigdecimal scale to 2 here
this.price.setScale(2, RoundingMode.HALF_UP);
}
将 JPA设置@Column
为灵活的规模(我认为这是不可能的),您的数据库也可能需要灵活,而且我认为数据库通常没有这个选项。
推荐阅读
- subset - 子集 dp 问题导致分段错误
- java - 在 iText 7 中计算表格的宽度
- azure-machine-learning-studio - 身份验证问题
- java - 复杂的泛型 java 接口和类
- mysql - MySQL查询以根据日期(字段总和)检索数据
- datetime - 如何为 Xamarin.Android AlarmManager 设置准确的时间
- php - 将每段的第一句改为
- windows - Kotlin native如何使用外部dll
- cookiecutter-django - Django Cookiecutter 在生产环境中使用环境变量模式
- c++ - 静态获取成员变量的偏移量