Спящий режим, сохраняющий большой десятичный

У меня есть код гибернации, который вставляет Bigdecimal число в столбец Db типа FLOAT. Это работает в целом. Однако, когда я пытаюсь вставить значение 0.00000000009080767 и снова извлечь объект, я вижу, что возвращаемое значение отличается.

Однако, когда я пытаюсь вставить значение с помощью SQL-запроса напрямую, а затем извлечь его с помощью метода загрузки hibernate, я вижу, что SOP метода getAmount выводит значение правильно.

Код:

Contact contact1 = new Contact("sailesh1117777", "unknown@gmail.com", "Vietnam1", "0904277091",new BigDecimal("0.00000000009080767"));
session.persist(contact1);
session.getTransaction().commit();
session.flush();
session.close();

session = sessionFactory.openSession();
Contact contact5 = (Contact) session.load(Contact.class, new Integer(1));
System.out.println(((BigDecimal)contact5.getAmount()).toPlainString());

<class name="Contact" table="CONTACT">
    <id name="id" column="CONTACT_ID">
        <generator class="increment"/>
    </id>
    <property name="name" type="string" column="NAME"/>
    <property name="email"/>
    <property name="address"/>
    <property name="telephone"/>
       <property name="amount" type="big_decimal"/>

</class>

ВЫХОД: 0.00000000008978076

2 ответа

Решение

Когда hibernate сохраняет объект в базе данных, он вызывает его метод toString, чтобы получить значение и сохранить его. Когда я глубоко осмотрел объект BigDecimal, я узнал, что метод toString возвращает экспоненциальное значение, и, следовательно, значение попадает в БД с другим значением. Для этого я написал пользовательский класс, расширяющий BigDecimal и переопределяющий метод toString, который внутренне будет вызывать метод toPlanString для BigDecimal и помогает преодолеть, экспоненциальное значение, которое будет вставлено, будет другим значением.

Измените сумму столбца вашей таблицы. Контакт с типом данных NUMBER(19,2), подобно

ALTER TABLE person
ALTER COLUMN amount NUMBER(19,2)
Другие вопросы по тегам