Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate JDBC PreparedStatement:如何添加复合类型_Hibernate_Postgresql_Jdbc_Prepared Statement_Composite Types - Fatal编程技术网

Hibernate JDBC PreparedStatement:如何添加复合类型

Hibernate JDBC PreparedStatement:如何添加复合类型,hibernate,postgresql,jdbc,prepared-statement,composite-types,Hibernate,Postgresql,Jdbc,Prepared Statement,Composite Types,如何通过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'

如何通过
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('Italy','Country',null,10,'1202'),ROW('email','aPhone','aMobile',null))
与INSERT一起使用时,它就像一个符咒,但当我尝试使用
PreparedStatement
时,它失败了。 我看过JDBC驱动程序的代码,似乎不支持PostgreSQL的结构类型。我错过什么了吗

setObject
中,我得到的不是正确的转换
PreparedStatement
而是在不应该添加的地方添加
'
。例如,我得到的不是上面的行,而是:

'ROW(ROW(''Italy'',''Country'',null,10,''1202''),ROW(''email'',''aPhone'',''aMobile'',null))'
这会失败,因为它不再被识别为结构。我也尝试加入

st.setEscapeProcessing(false);
但是仍然添加了
。我需要使用
PreparedStatement
,因为在定义自定义用户类型时,我在Hibernate中遇到了一个问题。

我正在考虑加入JDBC驱动程序项目,尝试添加对STRUCT对象的支持。

行构造函数
row()
是一个PostgreSQL函数调用。您需要传递一个——或者更准确地说:一个表示复合类型的字符串文本

请尝试以下语法:

SELECT '("(Italy,""Country with space"",,10,1202)"
        ,"(email,aPhone,aMobile,)")'::fullcontact
因此,您的价值将是:

("(Italy,""Country with space"",,10,1202)","(email,aPhone,aMobile,)")
我加入了“带空格的国家”来演示带有特殊字符的语法。

阅读有关的详细信息。

行构造函数
row()
是一个PostgreSQL函数调用。您需要传递一个——或者更准确地说:一个表示复合类型的字符串文本

请尝试以下语法:

SELECT '("(Italy,""Country with space"",,10,1202)"
        ,"(email,aPhone,aMobile,)")'::fullcontact
因此,您的价值将是:

("(Italy,""Country with space"",,10,1202)","(email,aPhone,aMobile,)")
我加入了“带空格的国家”来演示带有特殊字符的语法。

阅读有关的详细信息。

对不起……问题不在于SQL本身,而在于使用预先准备好的语句,它没有给我设置结构类型的机会……我的意思是,当我添加正确的字符串时,会出现转义,给我错误的结果,我在我的问题上报告了这个结果……周一,我将尝试发布一个完整的例如……不过,感谢您对语言的支持和纠正;-)抱歉…问题不在SQL本身,而是在使用prepared语句时,它没有给我设置结构类型的机会…我的意思是,当我添加正确的字符串时,会发生转义,给我错误的结果,我在我的问题上报告了这个结果…周一,我将尝试发布一个完整的示例…不过,感谢您的支持支持和您对语言的更正;-)