postgresql - 如何将 numeric(13, 3)[] 数据库列映射到 Hibernate 实体字段?

标签 postgresql hibernate

我们有一个用例,Postgres 数据库中存在 numeric(13,3)[] 类型的列 'datewise_tariff'。此列存储的值是十进制值,例如 {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,但似乎它也不支持相同的功能。

最佳答案

经过一段无休止的尝试和尝试以及深入 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)

关于postgresql - 如何将 numeric(13, 3)[] 数据库列映射到 Hibernate 实体字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62206147/

相关文章:

java - org.hibernate.exception.SQLGrammarException : could not execute query

mysql - 不支持源数据类型 [geometry]

JDBC 中的 Java 类型到 Postgres ltree

asp.net - postgresql 可以扩展到 sql server 吗?容易调整吗?

ruby-on-rails - 如何在 Rails 4 中通过 hstore 属性对结果进行排序?

java - 使用 Hibernate 映射 ArrayList

java - hibernate JTA : Read DB connection parameters per environment

java - Spring 数据(其余): Date serialization mapping returns a wrong value

java - 使用 Java 代码设置 Hibernate 映射值

hibernate - 当我的实体成员字段中没有 Set 时,如何在 JPA 中构造 SetJoin?