【问题标题】:How to map numeric(13, 3)[] database column to Hibernate entity field?如何将 numeric(13, 3)[] 数据库列映射到 Hibernate 实体字段?
【发布时间】:2023-03-06 17:53:02
【问题描述】:

我们有一个用例,在 Postgres 数据库中存在 'datewise_tariff' 类型的列 numeric(13,3)[]。此列存储的值是十进制值,例如{953.893,953.893,953.893}

我们需要将此列类型映射到 Hibernate Java 实体,但我们收到以下错误:

SQL Error: 0, SQLState: 42804
ERROR: column "datewise_tariff" is of type numeric[] but expression is of type bytea
  Hint: You will need to rewrite or cast the expression.
  Position: 738

我们尝试通过以下方式对其进行映射:

@Column(name = "datewise_tariff")
private float[] datewiseTariff
@Column(name = "datewise_tariff")
private BigDecimal[] datewiseTariff
@Column(name = "datewise_tariff", columnDefinition = "numeric(13,3)[]")
private float[] datewiseTariff;
@Column(name = "datewise_tariff", columnDefinition = "numeric(13,3)[]")
private BigDecimal[] datewiseTariff;
@Column(name = "datewise_tariff", columnDefinition = "numeric(13,3)[]")
private byte[] datewiseTariff;
@Column(name = "datewise_tariff")
private byte[] datewiseTariff;

以上所有方法似乎都不起作用,并且总是抛出相同的上述错误。 另外,尝试使用hibernate-types sdk,但它似乎也不支持相同的。

【问题讨论】:

    标签: postgresql hibernate


    【解决方案1】:

    在经历了无休止的打击和试验并潜入 Hibernate 文档的海洋之后,终于找到了一种方法。 @ColumnTransformer 来救场了。

    用法如下:

    @Type(type = "list-array")
    @Column(name = "datewise_tariff")
    @ColumnTransformer(write = "?::numeric(13,3)[]", read = "?::float[]")
    private List<Double> datewiseTariff;
    

    list-array 是使用 hibernate-types 库定义的。

    @TypeDef(name = "list-array", typeClass = ListArrayType.class)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-30
      • 2018-01-16
      • 2019-08-10
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2013-04-05
      相关资源
      最近更新 更多