HIbernate BigDecimal映射到MySql float字段出现问题

RunACoding 发布于 2016/10/13 17:09
阅读 481
收藏 0

hibernate中配置

<property name="orderNumber" type="java.math.BigDecimal">
<column name="order_number" scale="0" length="80" precision="80" sql-type="NUMERIC(80,0)"/>    
</property>

如题,当在插入4571476348901579时,数据库中就变成4571476216774656,试了很多次,只有前七位是一样的,后面在插入就乱了,是什么回事?求解...

加载中
0
醉酒
醉酒
看一下数据库设计的时候  字段定义的fload小数点后几位数
醉酒
醉酒
回复 @RunACoding : jdbc传string过去 别传float
RunACoding
RunACoding
回复 @醉酒 : 使用jdbc存进去结果还是一样的,不行呀
RunACoding
RunACoding
回复 @醉酒 : 好的 谢谢,我试下 实在没办法了
醉酒
醉酒
回复 @RunACoding : 这没什么,大一点的项目都是hibernate跟 jdbc结合来用的
RunACoding
RunACoding
这个倒应该可以,但是使用hibernate在使用jdbc是不是不太好
下一页
0
学而不思则罔
学而不思则罔
是不是在代码中做了什么计算或转换丢失了精度呢?比如先存在double里再转BigDecimal存数据库的。
RunACoding
RunACoding
这个到没有,就直接放到数据结构中,然后使用hibernate存进去,都不行!如果把float字段换成decimal或numeric就可以正常存了,但是数据库字段不能修改,只能继续找办法!
0
ya_guang
ya_guang
NUMERIC(80,0),0不保留小数吗?
RunACoding
RunACoding
不保留小数!
0
魔力猫
魔力猫

The maximum number of digits for DECIMAL is 65, but the actual range for a given DECIMAL column can be constrained by the precision or scale for a given column. When such a column is assigned a value with more digits following the decimal point than are permitted by the specified scale, the value is converted to that scale. (The precise behavior is operating system-specific, but generally the effect is truncation to the permissible number of digits.)

根据5.7的说明,你设定到80超范围了。

RunACoding
RunACoding
改成20也是没用!一样是前面七位一样,七位之后都是不一样的
0
李玉珏
李玉珏

mysql的float类型保存的不是精确值。

http://dev.mysql.com/doc/refman/5.6/en/floating-point-types.html

RunACoding
RunACoding
回复 @李玉珏 : 然而PHP存贮都是没有问题的,这又是什么回事呢?
李玉珏
李玉珏
回复 @RunACoding : 这是数据库类型机制的问题,和Hibernate没有关系,正确做法是协调修改字段类型。
RunACoding
RunACoding
那在不改字段名情况下使用hibernate什么确保存入16位精确数字?
返回顶部
顶部