我正在使用Hibernate作为我们的对象相关映射,并具有用于模糊数据库的自定义方言。
我从该数据库中检索的实体具有一列:
@Column(name = "GROSS_WEIGHT", precision = 9, scale = 3)
private BigDecimal grossWeight;
数据库的该列定义为数字,精度为9,比例为3。
我可以看到Hibernate生成以检索数据的SQL,当我使用数据库查询工具执行相同的查询时,它将返回Gross_Weight列的" 9.68"。
但是,在Hibernate检索的实体中,"少量量级"字段包含值'10',而scale
为0, precision
和2!
在我使用的自定义方言类中,我尝试过覆盖以下列类型:
registerColumnType( Types.DECIMAL, "numeric($p,$s)" );
registerColumnType( Types.DOUBLE, "numeric($p,$s)" );
registerColumnType( Types.NUMERIC, "numeric($p,$s)" );
,但它仅返回(圆形的)整数。
这在应用程序的其他地方起作用,在该应用程序中,我们使用Postgres方言从Postgres检索对象。
任何想法我在方言中应该做什么,以便我可以找到冬眠以正确设置检索到的bigdecimal的精度/刻度?
好吧,在下载了冬眠来源后,并通过Netbeans的调试器踏上了他们,我发现问题在于专有的JDBC驾驶员ResultSet
子类,而不是在Hibernate中,而不是在Hibernate。<<<<<</p>
getBigDecimal
方法总是返回一个比例为0的值。
当我联系JDBC驱动程序的开发人员时,他发现了错误并修复了该错误。