我必须在JPA中映射一个BigDecimal
:
@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
的依存关系中是否有类似 flexible scale 的东西?因为在内部,BigDecimal的操作完全类似于这样:如果未给出比例(这是默认设置),则Java将根据可用的精度调整所需的比例。
答案 0 :(得分:1)
在保存实体之前,您可能希望使用类似@PrePersist @PreUpdate
的注解来固定BigDecimal
的比例。
类似的东西:
@PrePersist
@PreUpdate
public void pricePrecisionConvertion() {
// convert your bigdecimal scale to 2 here
this.price.setScale(2, RoundingMode.HALF_UP);
}
将@Column
设置为灵活地适应JPA(我认为这是不可能的),您的数据库也可能需要灵活,而且我不认为数据库通常具有此选项。