我正在尝试使用以下设置: Wildfly 8.1.0(Hibernate自带JPA实现) Postgres 9.3数据库
我想将一个Java String映射到postgres的xml-type列,但我得到的错误是该列的类型为“xml”,而表达式的类型为varchar。
我发现大多数(可能)解决方案都是数据库特定的java类,hibernate特定的解决方法或者只是在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列中来验证这一点,该列工作正常。
异常仍然存在。
提前感谢提示和指示,
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 (?, ?, ?))
fyi:stuff和xml可以为空,ID是primaryKey,20是从序列中正确检索的。
答案 0 :(得分:4)
在最近讨论过pgsql-hackers之后,我发现有一个更简单的方法可以解决这个问题。在JDBC URL中,或在连接时传递给驱动程序的属性映射中,添加:
stringtype=unspecified
这将导致PgJDBC将setString(...)
分配的值unknown
类型报告给PostgreSQL,然后将推断出由于目标字段为xml
,应该处理该字符串属于xml
类型。