Java 带JPA和灵活刻度的BigDecimal
我必须在JPA中映射一个Java 带JPA和灵活刻度的BigDecimal,java,hibernate,jpa,Java,Hibernate,Jpa,我必须在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, scale = 4)
private BigDecimal price;
数据库中还正确设置了精度和比例
但是,对于给定的刻度,所有值都以4的刻度存储,即使值只需要2的刻度。例如,如果我使用如下数字:
12.12345678
然后将该值截断为
12.1234
即使是精度也允许更高的刻度4(因为允许的精度是16,使用的精度是6,因此Hibernate可以多存储10位数字,并使用这些数字,即使对于所需的更高刻度)
hibernate是否有办法根据实际刻度及其精度而不是硬编码刻度来调整刻度?如果我映射没有比例的BigDecimal:
@Column(name = "price", precision = 16)
private BigDecimal price;
然后Hibernate默认为2。在JPA中,是否有一种类似于灵活的刻度,取决于可用的最大
精度
?因为在内部,BigDecimal做的正是这样的事情:如果没有给定比例(这是默认值),那么java会根据可用的精度来调整所需的比例。可能您需要类似于@PrePersist@PreUpdate
注释的东西来修复BigDecimal
比例,然后再保存实体
比如:
@PrePersist
@PreUpdate
public void pricePrecisionConvertion() {
// convert your bigdecimal scale to 2 here
this.price.setScale(2, RoundingMode.HALF_UP);
}
将@Column
设置为JPA的灵活比例(我认为这是不可能的),您的数据库也需要灵活,而我认为数据库通常没有此选项