当前位置: 首页 > 面试题库 >

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

曹骞仕
2023-03-14
问题内容

我将Hibernate用作我们的对象关系映射,并为晦涩的数据库使用了自定义方言。

我从该数据库中检索的实体具有一列,因此:

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

数据库将此列定义为数字,精度为9,小数位数为3。

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

但是,在由Hibernate检索的Entity中,“ grossWeight”字段包含值“ 10”,a scale的值为0和precision2!

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

        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驱动程序的开发人员时,他发现了该错误并进行了修复。



 类似资料:
  • 我使用Hibernate作为我们的对象关系映射,为一个模糊的数据库使用自定义方言。 我从这个数据库检索的实体有一个列,因此: 数据库将此列定义为数字,精度为9,刻度为3。 我可以看到Hibernate生成的检索数据的SQL,当我使用数据库查询工具执行相同的查询时,它会返回GROSS_WEIGHT列的9.68。 但是,在Hibernate检索到的实体中,“GrossWight”字段包含值“10”,其

  • 从数据传输对象(DTO)到具有双向一对多关联的Hibernate实体执行MapStruct映射的最佳方法是什么? 假设我们有一个,其中链接了多个类型为的评论: 相应的Hibernate实体<代码>书籍<代码>与<代码>评论<代码>有一对多关联: 请注意,本书的方法还通过调用来双向设置关联,这是Hibernate专家推荐的(例如,Thorben Janssen的“Hibernate Tips:如何映

  • 我有一个要求,在那里我将从2列像天和月的数据,但我想把它转换成一个日期对象,并把它设置成我的bean类。 这是否可能不添加属性到java类? 我尝试检查自定义结果处理程序,但示例不够清晰。在从select方法返回之前,是否有钩子来运行某种自定义处理程序?

  • 我正在我的项目中实现Hibernate Envers,对于这个客户端,数据库中的表和列必须遵循特定的名称模式。name模式使用表名来生成列名的一部分,保存修订的表与原始表有不同的名称(当然),因此我需要能够更改Envers生成的表的列名。 如何更改实体试听表的列名称? 我正在使用Hibernate 4.3.11-FINAL 我毫不费力地喊出修订表(REVINFO)名称,也没有列实体的试镜表名称

  • 我有两个对象,除了date成员外,其他成员都相同。在obj1中,date是java.sql.date,obj2.date是long(纪元)。 我需要编写一个映射器来将obj1映射到obj2。这就是我试图做的: 但是mapperImpl只有自己的日期转换实现: 我得到了: 这种转换的正确方式是什么?