如何使用 Hibernate 映射 PostgreSQL 数组 [英] How to map a PostgreSQL array with Hibernate

查看:47
本文介绍了如何使用 Hibernate 映射 PostgreSQL 数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

has anyone successfully mapped a numeric array in PostgreSQL to a numeric array in java via Hibernate?

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 does not support database arrays (e.g. ones mapped to java.sql.Array) out of the box.

arrayprimitive-array 类型用于将 Java 数组映射到后备表 - 它们基本上是一对多/集合的变体 -元素映射,所以这不是你想要的.

array and primitive-array types provided by Hibernate are for mapping Java arrays into backing table - they're basically a variation of one-to-many / collection-of-elements mappings, so that's not what you want.

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

Latest PostgreSQL JDBC driver (8.4.whatever) supports JDBC4 Connection.createArrayOf() method as well as ResultSet.getArray() and PreparedStatement.setArray() methods, though, so you can write your own UserType to provide array support.

这里是一个 UserType处理 Oracle 数组的实现提供了一个很好的起点,将其调整为处理 java.sql.Array 是相当简单的.

Here is a UserType implementation dealing with Oracle array that provides a good starting point, it's reasonably straightforward to adapt it to handle java.sql.Array instead.

这篇关于如何使用 Hibernate 映射 PostgreSQL 数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆