java - Hibernate - 自定义方言的 BigDecimal 列映射

标签 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 的精度/小数位数吗?

最佳答案

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

getBigDecimal 方法总是返回一个小数位数为 0 的值。

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

关于java - Hibernate - 自定义方言的 BigDecimal 列映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21568693/

相关文章:

java - 从另一个类向 JFrame 添加对象?

java - 如何在具有单独索引的 Java 8 中应用 reduce/collect 过滤器?

java - 如何找到某个接口(interface)的所有实现?

java - org.springframework.beans.factory.BeanCreationException : NoClassDefFoundError: Could not initialize class org. hibernate.ann

hibernate - JPA 标准 : downcast root to multiple entity subclasses and filter by the same linked entity natural id

java - Eclipse - 生成 JavaDoc - NullPointerException

java - 如何根据底层数据库更改 Hibernate GenerationType 标识符

mysql - 使用 hibernate 保存或更新包含日期字段的实体的操作会减去一天

java - Jpa查询从缓存而不是数据库中提取?

java - 使用 jpa(MYSQL) 创建一对多关系