bigdecimal 的休眠保存
hibernate save of bigdecimal
我有休眠代码,它将 Bigdecimal 数字插入到 FLOAT 类型的 Db 列中。它一般有效。但是,当我尝试插入一个值 0.00000000009080767
并再次获取对象,我看到返回值不同。
然而,当我尝试直接使用 SQL 查询插入值,然后使用休眠加载方法获取时,我发现 getAmount 方法的 SOP 正确打印了值。
代码:
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
将 table 联系人的金额列更改为 NUMBER(19,2)
的数据类型。喜欢
ALTER TABLE person
ALTER COLUMN amount NUMBER(19,2)
当hibernate将一个对象保存到数据库中时,它调用它的toString方法来获取值并保存它。当我深入检查 BigDecimal 对象时,我开始知道 toString 方法 returns 指数值,因此该值以不同的值进入数据库。为此,我写了一个自定义 class,扩展 BigDecimal 并覆盖 toString 方法,它在内部将调用 BigDecimal 的 toPlanString 方法并帮助克服,插入的指数值将是一个不同的值。
我有休眠代码,它将 Bigdecimal 数字插入到 FLOAT 类型的 Db 列中。它一般有效。但是,当我尝试插入一个值 0.00000000009080767 并再次获取对象,我看到返回值不同。
然而,当我尝试直接使用 SQL 查询插入值,然后使用休眠加载方法获取时,我发现 getAmount 方法的 SOP 正确打印了值。
代码:
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
将 table 联系人的金额列更改为 NUMBER(19,2)
的数据类型。喜欢
ALTER TABLE person
ALTER COLUMN amount NUMBER(19,2)
当hibernate将一个对象保存到数据库中时,它调用它的toString方法来获取值并保存它。当我深入检查 BigDecimal 对象时,我开始知道 toString 方法 returns 指数值,因此该值以不同的值进入数据库。为此,我写了一个自定义 class,扩展 BigDecimal 并覆盖 toString 方法,它在内部将调用 BigDecimal 的 toPlanString 方法并帮助克服,插入的指数值将是一个不同的值。