JPA(Hibernate) 将字符串映射到 postgres XML 数据类型
问题:JPA(Hibernate) 将字符串映射到 postgres XML 数据类型 我正在尝试使以下设置正常工作:Wildfly 8.1.0(带有 Hibernate 作为 JPA 实现)Postgres 9.3 数据库 我想将 Java 字符串映射到 postgres 的 xml 类型的列,但我得到的错误是该列是“xml”类型,而表达式是 varchar 类型。 我发现的大多数(可能)解决方
问题:JPA(Hibernate) 将字符串映射到 postgres XML 数据类型
我正在尝试使以下设置正常工作:Wildfly 8.1.0(带有 Hibernate 作为 JPA 实现)Postgres 9.3 数据库
我想将 Java 字符串映射到 postgres 的 xml 类型的列,但我得到的错误是该列是“xml”类型,而表达式是 varchar 类型。
我发现的大多数(可能)解决方案都存在于特定于数据库的 java 类、特定于休眠的解决方法或只是在 Stackoverflow 上未回答的问题。
我想使用定义好的JPA-Methods能够随意切换到Mysql或者SQLServer,甚至用glassfish或者tomcat+openJPA替换Widlfly+hibernate而不用接触代码。
然而,在数据库中调整一些东西会很好。
我当然已经做了一些研究,发现了这篇文章:http://www.pateldenish.com/2013/05/inserting-json-data-into-postgres-using-jdbc-driver.html
所以我尝试为 text 和 varchar 添加隐式转换:
create cast (varchar as xml) without function as implicit;
create cast (text as xml) without function as implicit;
但是 postgres 只是说这些演员表已经存在。我通过将随机字符串插入 xml 列来验证这一点,效果很好。
异常仍然发生。
提前感谢您的提示和指导,
比尔门
更新:
我使用 postgres 9.3.1102.jdbc41
语句休眠问题:
[PreparedStatement] setLong(3, 20)
[PreparedStatement] setNull(2, -3)
[PreparedStatement] setNull(1, 12)
[Connection] prepareStatement(insert into testTable (xml, stuff, id) values (?, ?, ?))
仅供参考: stuff 和 xml 可以为空,ID 是 primaryKey 并且 20 是从序列中正确检索的。
解答
在最近关于 pgsql-hackers 的讨论之后,我发现有一种更简单的方法来处理这个问题。在您的 JDBC URL 中,或在连接时传递给驱动程序的属性映射中,添加:
stringtype=unspecified
这将导致 PgJDBC 将分配给setString(...)
的值报告为unknown
类型给 PostgreSQL,然后推断由于目标字段是xml
,字符串应该被视为xml
类型。
更多推荐
所有评论(0)