Hibernate - Custom Dialect的BigDecimal列映射

时间:2014-02-05 04:31:42

标签: java hibernate jpa hibernate-mapping bigdecimal

我正在使用Hibernate作为我们的对象关系映射,使用自定义方言来表示一个模糊的数据库。

我从这个数据库中检索的实体有一列:

    @Column(name = "GROSS_WEIGHT", precision = 9, scale = 3)
    private BigDecimal grossWeight;

数据库将此列定义为数字,精度为9,比例为3.

我可以看到Hibernate生成的SQL来检索数据,当我使用数据库查询工具执行相同的查询时,它会返回GROSS_WEIGHT列的“9.68”。

但是,在Hibernate检索的实体中,'grossWeight'字段包含值'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检索对象的应用程序的其他地方有效。

知道我应该在方言中做什么,这样我就可以让Hibernate正确设置检索到的BigDecimal的精度/比例?

1 个答案:

答案 0 :(得分:11)

好的,在下载了Hibernate源代码并在NetBeans中使用调试器逐步执行它们后,我发现问题出在专有的JDBC驱动程序的ResultSet子类中,而不是在Hibernate中。

getBigDecimal方法总是返回一个标度为0的值。

当我联系JDBC驱动程序的开发人员时,他发现了该错误并修复了它。