【发布时间】:2012-04-01 22:10:58
【问题描述】:
如何通过PreparedStatement 添加 PostgreSQL 组合类型?
复合类型为:
CREATE TYPE fullcontact AS (address address,contacts contact);
ALTER TYPE fullcontact OWNER TO postgres;
COMMENT ON TYPE fullcontact IS 'Describe a type for a contact info with phone, email, and address';
我正在尝试通过添加它
FullContact fc = (FullContact)value;
PGobject pgObj = castToPGObject(fc);
PreparedStatement st = [this is a reference i obtain from a method];
st.setObject(index,pgObj);
castToPGObject 将 FullContact 实例转换为 ROW 格式。这是一个实例转换的结果:
ROW(ROW('Italy','Country',null,10,'1202'),ROW('email','aPhone','aMobile',null))
与 INSERT 一起使用它就像一个魅力,但是当我尝试使用 PreparedStatement 它失败了。
我查看了 JDBC 驱动程序的代码,似乎不支持 PostgreSQL 的 STRUCT 类型。我错过了什么吗?
从setObject 我得到,而不是正确的转换PreparedStatement 在不应该的地方添加'。例如,我得到的不是上面的 ROW:
'ROW(ROW(''Italy'',''Country'',null,10,''1202''),ROW(''email'',''aPhone'',''aMobile'',null))'
这失败了,因为它不再被识别为结构。我也尝试过添加
st.setEscapeProcessing(false);
但' 仍被添加。我需要使用PreparedStatement,因为在定义自定义用户类型时我在 Hibernate 中遇到了问题。
我正在考虑加入 JDBC Driver 项目以尝试添加对 STRUCT 对象的支持。
【问题讨论】:
标签: hibernate postgresql jdbc prepared-statement composite-types