JPA(Hibernate)如何将String映射为PostgreSQL的XML数据类型

3
我正在尝试使以下设置生效: Wildfly 8.1.0 (带有Hibernate作为JPA实现) Postgres 9.3数据库
我想将Java字符串映射到postgres的xml类型列,但我得到了错误,该列的类型为“xml”,而表达式的类型为varchar。
我找到的大多数(可能)解决方案都是特定于数据库的Java类、Hibernate特定的解决方法或在Stackoverflow上没有回答的问题。
我想使用定义的JPA方法,以便能够随意切换到Mysql或SQLServer,甚至可以替换Widlfly + hibernate为glassfish或tomcat + openJPA而不触及代码。
但是在数据库中微调一些东西也是可以的。
当然,我已经进行了一些研究,并找到了这篇文章: http://www.pateldenish.com/2013/05/inserting-json-data-into-postgres-using-jdbc-driver.html 因此,我尝试添加了文本和varchar的隐式转换:
create cast (varchar as xml) without function as implicit;
create cast (text as xml) without function as implicit;

但 PostgreSQL 只是说这些转换已经存在。我通过将随机字符串插入 xml 列来验证此问题,而这个操作是成功的。
异常仍然存在。
谢谢您提前给予提示和指导。
BillDoor 更新:
我使用的是 postgres 9.3.1102.jdbc41
Hibernate 发出的语句:
[PreparedStatement] setLong(3, 20)
[PreparedStatement] setNull(2, -3)
[PreparedStatement] setNull(1, 12)
[Connection] prepareStatement(insert into testTable (xml, stuff, id) values (?, ?, ?))

提示:stuff和xml可以为空,ID是主键,20正确地从序列中检索出来。

1个回答

4

最近在pgsql-hackers上的讨论中,我发现有一种更容易处理此问题的方法。 在您的JDBC URL中或在连接时传递给驱动程序的属性映射中添加以下内容:

stringtype=unspecified

这将导致PgJDBC报告使用setString(...)分配的值为未知类型,而PostgreSQL会推断,由于目标字段是xml,因此该字符串应被视为xml类型。


将connectionURL更改为:jdbc:postgresql://localhost:5432/testDb?stringtype=unspecified - 错误仍然存在,我需要在其他地方放置该属性吗? - billdoor
@billdoor,你能从日志中提取出底层的SQL查询语句吗?(你可能需要更改设置)。 - Craig Ringer
@billdoor 你使用的是哪个 PgJDBC 版本? - Craig Ringer
我更新了我问题中的两个答案,顺便感谢你的努力。 - billdoor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接