Hibernate - Custom Dialect的BigDecimal列映射

Dun*_*ear 9 java hibernate jpa bigdecimal hibernate-mapping

我正在使用Hibernate作为我们的对象关系映射,使用一个隐藏数据库的自定义方言.

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

    @Column(name = "GROSS_WEIGHT", precision = 9, scale = 3)
    private BigDecimal grossWeight;
Run Code Online (Sandbox Code Playgroud)

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

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

但是,在由Hibernate检索的实体中,'grossWeight'字段包含值'10',其中scale0和precision2 为0 !

在我正在使用的自定义方言类中,我尝试重写以下列类型:

        registerColumnType( Types.DECIMAL, "numeric($p,$s)" );
        registerColumnType( Types.DOUBLE, "numeric($p,$s)" );
        registerColumnType( Types.NUMERIC, "numeric($p,$s)" );
Run Code Online (Sandbox Code Playgroud)

但它仍然只返回(舍入的)整数.

这在我们使用Postgres方言从Postgres检索对象的应用程序的其他地方有效.

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

Dun*_*ear 11

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

getBigDecimal方法始终返回一个标度为0的值.

当我联系JDBC驱动程序的开发人员时,他发现了bug并修复了它.

  • "数据库"实际上是一个名为"Genesis"的专有RDBMS引擎,位于Acucobol(现为MicroFocus)Vision索引文件之上.驱动程序称为"Vortex".驱动程序和引擎均由[Trifox Inc](http://www.trifox.com/index.html)编写,但由[MicroFocus]销售/分发(https://www.microfocus.com/media/data折叠/ acuxdbc_tcm6-1136.pdf) (2认同)