Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带JPA和灵活刻度的BigDecimal_Java_Hibernate_Jpa - Fatal编程技术网

Java 带JPA和灵活刻度的BigDecimal

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位

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