BigDecimal с JPA и гибкой шкалой - PullRequest
       12

BigDecimal с JPA и гибкой шкалой

0 голосов
/ 30 сентября 2019

Мне нужно отобразить 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. Есть ли что-то вроде гибкая шкала в зависимости от максимально доступного precision в JPA? Потому что внутренне BigDecimal делает именно так: если масштаб не задан (по умолчанию), тогда java адаптирует необходимый масштаб в соответствии с доступной точностью.

1 Ответ

1 голос
/ 30 сентября 2019

Возможно, вам нужно что-то вроде @PrePersist @PreUpdate аннотации, чтобы исправить вашу шкалу BigDecimal перед сохранением вашей сущности.

Что-то вроде:

@PrePersist
@PreUpdate
    public void pricePrecisionConvertion() {
        // convert your bigdecimal scale to 2 here
        this.price.setScale(2, RoundingMode.HALF_UP);
    }

Установка @Column в гибкую шкалудля JPA (что, я думаю, невозможно), ваша база данных также должна быть гибкой, и я не думаю, что базы данных вообще имеют такую ​​возможность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...