gpt4 book ai didi

java - BigDecimal 具有 JPA 和灵活的缩放比例

转载 作者:行者123 更新时间:2023-12-02 09:28:25 29 4
gpt4 key购买 nike

我必须在 JPA 中映射 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的灵活比例(我认为这是不可能的),您的数据库也可能需要灵活,而且我认为数据库通常没有此选项。

关于java - BigDecimal 具有 JPA 和灵活的缩放比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58171274/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com