有没有人通过Hibernate成功地将PostgreSQL中的数字数组映射到java中的数字数组?

sql:

CREATE TABLE sal_emp (name text, pay_by_quarter integer[]);
INSERT INTO sal_emp VALUES ('one', '{1,2,3}');
INSERT INTO sal_emp VALUES ('two', '{4,5,6}');
INSERT INTO sal_emp VALUES ('three', '{2,4,6}');

映射:

<hibernate-mapping>
    <class name="SalEmp" table="sal_emp">
        <id name="name" />
        <property name="payByQuarter" column="pay_by_quarter" />
    </class>
</hibernate-mapping>

课程:

public class SalEmp implements Serializable{
    private String name;
    private Integer[] payByQuarter;
    ...// getters & setters
}

我在查询表时遇到异常.

推荐答案

Hibernate不支持现成的数据库数组(例如映射到java.sql.Array的数据库数组).

Hibernate提供的arrayprimitive-array类型用于将Java数组映射到支持表中——它们基本上是一对多/元素集合映射的变体,所以这不是您想要的.

不过,最新的PostgreSQL JDBC驱动程序(8.4.whatever)支持JDBC4 Connection.createArrayOf()方法以及ResultSet.getArray()PreparedStatement.setArray()方法,所以您可以编写自己的UserType来提供数组支持.

Here是一个处理Oracle数组的用户类型实现,它提供了一个很好的起点,将其改为处理java.sql.Array相当简单.

Postgresql相关问答推荐

将real[]数组作为完整的浮点值从postquist返回

如何高效地将行聚合到数组中,同时保留`NULL`来指示丢失的数据?

Postgres BULK INSERT如何影响Debezium?

如何将存储的、生成的列添加到非常大的表中?

多克.波斯格雷斯.PgAdmin4

PostgreSQL:动态SELECT查询

仅使用 ssl 连接到 Postgresql 数据库

在Postgre中的链接服务器上执行远程查询

PostgreSql maintenance_work_mem 在索引创建期间增加

psql中set、\set和\pset的区别

Psycopg2 使用占位符插入表格

如何在 PostgreSQL 中创建 guid

try 为 ror 应用程序设置 postgres,出现错误 - fe_sendauth:no password supplied

PostgreSQL 嵌套 CTE 和 UNION

带有 WITH 子句的查询时出现 Postgresmissing FROM-clause entry错误

Postgresql:备份所有表 struct ,但只备份少数数据表

使用 Spring、Hibernate 和 C3P0 管理多租户 Web 应用程序中的连接池

如何获取一个月的天数?

PostgreSQL 中具有多个连接的 UPDATE 语句

PostgreSQL 中 from dual 的等价性