相关疑难解决方法(0)

Hibernate - Custom Dialect的BigDecimal列映射

我正在使用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的精度/比例?

java hibernate jpa bigdecimal hibernate-mapping

9
推荐指数
1
解决办法
4638
查看次数

Play Framework Ebean BigDecimal分数

我正在使用Play框架与Ebean和H2数据库.

问题是,BigDecimalDB脚本中的结果如下:

  sum                       decimal(38),
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

  sum                       decimal(38,2),
Run Code Online (Sandbox Code Playgroud)

我已经尝试在模型中定义这样的值:

    @Digits(integer=6, fraction=2)
    private BigDecimal sum;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

h2 playframework ebean

6
推荐指数
1
解决办法
1255
查看次数

如何在 Hibernate 中映射 BigDecimal 以便返回与输入相同的比例?

在 Java 中,new BigDecimal("1.0") != new BigDecimal("1.00")规模很重要

然而,这显然不适用于 Hibernate/SQL Server。如果我将 BigDecimal 上的比例设置为特定值,通过 Hibernate 将 BigDecimal 保存到数据库,然后重新膨胀我的对象,我会返回一个具有不同比例的 BigDecimal。

例如,值 1.00 返回为 1.000000,我假设是因为我们将 BigDecimals 映射到定义为的列 NUMERIC(19,6)。我不能只将列定义为所需的比例,因为我需要将美元和日元值(例如)存储在同一列中。我们需要在数据库中将 BigDecimal 表示为数字类型,以便外部报告工具使用。

是否存在“正确”映射 BigDecimal 的 Hibernate UserType,还是我必须自己编写?

java sql-server hibernate bigdecimal hibernate-mapping

5
推荐指数
1
解决办法
2万
查看次数