gpt4 book ai didi

hibernate - JPA(Hibernate) 将字符串映射到 postgres XML 数据类型

转载 作者:行者123 更新时间:2023-11-29 11:43:18 28 4
gpt4 key购买 nike

我正在尝试让以下设置工作:Wildfly 8.1.0(附带 Hibernate 作为 JPA 实现)Postgres 9.3 数据库

我想将 Java 字符串映射到 postgres 的 xml 类型的列,但我收到错误消息,列的类型为“xml”,而表达式的类型为 varchar。

我发现的大多数(可能)解决方案都是在特定于数据库的 Java 类、特定于 hibernate 的变通方法或 Stackoverflow 上未回答的问题中找到的。

我想使用定义的JPA-Methods可以随意切换到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;

但是 postgres 只是说这些转换已经存在。我通过将随机字符串插入 xml 列来验证这一点,效果很好。

异常仍然发生。

提前感谢您的提示和指导,

比尔门

更新:

我用的是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 可以为 null,ID 是 primaryKey 并且 20 是从序列中正确检索的。

最佳答案

在最近关于 pgsql-hackers 的讨论之后,我发现有一种更简单的方法来处理这个问题。在您的 JDBC URL 中,或在连接时传递给驱动程序的属性映射中,添加:

stringtype=unspecified

这将导致 PgJDBC 向 PostgreSQL 报告用 setString(...) 分配的值是 unknown 类型,然后 PostgreSQL 将推断因为目标字段是xml,字符串应被视为xml类型。

关于hibernate - JPA(Hibernate) 将字符串映射到 postgres XML 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738928/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com