使用 EclipseLink JPA 将 XML 类型存储到 PostgreSQL

2023-12-06

我是 JPA 新手,我有一个关于如何使用 JPA 将 XML 类型存储到 PostgreSQL 的问题。我只是扩展现有的 POJO 以将附加的 XML 字段保留到列中。 POJO 看起来像这样(我故意省略了一堆其他列以使其更短,在添加这个额外的 XML 类型之前,这个 POJO 可以通过 JPA 很好地保存到 PostgreSQL 中)。

public class Finding implements Serializable {

private static final long serialVersionUID = -5814053129578212916L;
    ...
    @Column(name = "PLUGIN_TEXT_XML")
    private String pluginTextXML;

    public void setPluginText(String pluginText) {
        this.pluginText = pluginText;
    }
    public String getPluginTextXML() {
            return pluginTextXML;
    }
}

当我尝试持久化这个 POJO 时,我收到了 PSQLException

Caused by: org.postgresql.util.PSQLException: ERROR: column "plugin_text_xml" is of type xml but expression is of type character varying
  Hint: You will need to rewrite or cast the expression.
  Position: 668

我一直在尝试在线查找如何在 JPA 中映射 XML 类型,但没有成功。如果有人可以帮助我或将我指向一个在线网站,以便我可以阅读更多内容,那么这将是一个很大的帮助!感谢您的阅读!


PostgreSQL 对类似文本类型之间的隐式转换非常严格,例如json, xml, etc.

严格正确的解决方案是使用setObject(the_string, java.sql.Types.SQLXML)使用 JDBC 设置参数时。这在 ORM 层中是很困难的,而且许多 ORM 似乎不能直接理解 SQL/XML 类型。

你可以告诉 PostgreSQL 允许来自text to xml通过修改系统目录隐式地进行。这并不理想,但它会起作用。

In psql, 您可以使用\dC xml将猫列出来xml:

                               List of casts
    Source type    |    Target type    |      Function      |   Implicit?   
-------------------+-------------------+--------------------+---------------
 character         | xml               | xml                | no
 character varying | xml               | xml                | no
 text              | xml               | xml                | no
 xml               | character         | (binary coercible) | in assignment
 xml               | character varying | (binary coercible) | in assignment
 xml               | text              | (binary coercible) | in assignment
(6 rows)

看到“隐式:否”了吗?

您需要使它们的分配可转换。因为它们是内置类型,所以你不能CREATE CAST对于他们,您必须直接更新目录,更改pg_cast table.

UPDATE pg_cast SET castcontext = 'a' 
FROM pg_cast c 
INNER JOIN pg_type srctype ON (c.castsource = srctype.oid)
INNER JOIN pg_type dsttype on (c.casttarget = dsttype.oid) 
WHERE pg_cast.oid = c.oid 
  AND srctype.typname IN ('text','varchar') 
  AND dsttype.typname = 'xml';

弄乱系统目录可能会产生意想不到的效果。在这种情况下,我相信进行此更改是相当安全的,但它仍然会扰乱系统的内部结构。继续需要您自担风险。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 EclipseLink JPA 将 XML 类型存储到 PostgreSQL 的相关文章

随机推荐

  • 如何在 Angular 2 上实现自定义验证器?

    如何在 Angular 2 中实现自定义验证器 I found 这个笨蛋 constructor private fb FormBuilder this form fb group singleSelection Rio App valid
  • 为什么 C 应用程序不先打印消息然后接收用户输入

    我正在尝试编写一个打印提示并接受用户输入的 C 应用程序 我用 fgets 编写了一个简单的程序 但它确实工作正常 我正在使用 eclipse c c 工具包 当我保存 gt 构建 gt 运行时 控制台保持空白 如果我输入一些输入 程序就会
  • apc vs eaccelerator vs xcache

    我正在研究使用其中哪一个 但我真的找不到一个脱颖而出的 E加速器比APC 但APC维护得更好 Xcache更快 但其他的语法更简单 有人对使用哪些建议以及为什么使用有建议吗 APC 将包含在 PHP 6 中 我猜选择它是有充分理由的 它的安
  • vector.push_back 上的“glibc free():无效的下一个大小(快速)”?

    当我运行我的程序时 它偶尔会崩溃并给出以下错误 检测到 glibc pathtoexecutable free 下一个大小无效 快速 回溯导致一个成员函数只调用向量的push back函数 void Path add Position p
  • 用于将重复行插入另一个表的插入触发器之前

    我有一张桌子叫tblspmaster其中 sp 列我有唯一索引 因此不会插入重复项 但我想将重复行插入到tblspduplicate 所以我决定为此编写触发器 IN 主表是tblspmaster记录将使用加载文件插入mysql create
  • 条形图上的错误栏

    我试图得到 一个漂亮的组条形图 我希望每个条形上都有误差条 如下所示 或类似的 由您自行决定 我有办法 ff Medical eq Patient Hygiene Near bed Far bed Direct 1 2759 0 9253
  • 为什么我的 XML 阅读器读取所有其他元素?

    我构建了一个非常简单的表格 显示 4 列和 4 行 执行以下代码时 它会显示 xml 文件中的所有其他元素 它不区分每个表行 它读起来没有任何问题 而且我已经运行了 xml 验证器 所以这不是语法问题 public partial clas
  • 什么时候需要条件变量,互斥锁还不够吗?

    我确信互斥锁还不够 这就是条件变量概念存在的原因 但这让我很困惑 当条件变量至关重要时 我无法用具体的场景说服自己 条件变量 互斥锁和锁之间的区别问题的接受答案说条件变量是 带有 信号 机制的锁 当线程需要时使用它 等待资源变得可用 线程可
  • FFMPEG 链接错误

    我正在尝试编译此版本的修改版本来自 FFMPEG 站点的转码示例 我已经使用了所有必需的包含并使用此加入了库 INCLUDEPATH FFMPEG DEV PATH include LIBS L FFMPEG DEV PATH lib la
  • 无论如何,我可以突出显示 JTable 中的一行吗?

    我目前正在使用 JTable 和 DefaultTableModel 构建数据库 在我的程序中我 具有允许用户搜索数据库的功能 我已经构建了搜索部分 但没有 知道如何突出显示 JTable 中的行或单元格 有人可以帮帮我吗 谢谢 您确定要突
  • PHP 访问数组值[重复]

    这个问题在这里已经有答案了 我正在尝试访问我创建的数组的值 但似乎失败了 我正在循环发送 VIA http 的数组 并添加docno and entryno到名为的新数组 ArrID 它可以添加到新数组中 但是当我尝试访问ArrID似乎没有
  • Sequelize 连接模型包括多对多

    假设我有三个这样的模型 var User define user username Sequelize INTEGER var UserPubCrawl define userpubcrawl user id Sequelize STRIN
  • Python中重新赋值会从内存中删除之前的值吗?

    gt gt p 5 gt gt id p 140101523888800 gt gt p 5 56 gt gt id p 140100617985840 我知道将新值分配给现有变量时 它指向内存中存储新值的新位置 但我的问题是 包含先前值的
  • selenium python 中 find_element_by_class_name 的属性是什么?

    browser webdriver Firefox browser get url divs browser find elements by class name class browser find element by class n
  • 使用 C 中的 regex.h 计算匹配数

    我正在使用 POSIX 正则表达式regex h用 C 语言计算英语文本片段中短语出现的次数 但返回值是regexec 只告诉是否找到匹配项 所以我尝试使用nmatch and matchptr找到不同的外观 但是当我打印出匹配项时matc
  • 为什么值类型没有出现默认构造函数?

    下面的代码片段给了我一个类型的构造函数和方法的列表 static void ReflectOnType Type type Console WriteLine type FullName Console WriteLine List
  • 寻找带有复选框的 WPF ComboBox

    我的谷歌技能让我失败了 任何人都听说过 WPF 这样的控件 我试图让它看起来像这样 winforms 屏幕截图 您可以通过设置组合框的 DataTemplate 自行完成此操作 本文向您展示了如何操作 对于列表框 但原理是相同的 另一篇文章
  • JQuery UI Accordion 无法处理 AJAX 加载的内容

    我正在尝试动态加载产品信息页面 该页面有一个手风琴菜单供用户浏览 单击按钮后 我使用 AJAX 动态引入手风琴的内容 手风琴的 HTML 以其应有的方式显示 但手风琴 方法 未执行以将内容修改为手风琴 Imports
  • 控制到达非 void 函数的末尾

    以下代码片段在编译时会生成一些警告消息 Cluster Myclass getCluster const Point p foreach Cluster c this foreach Point point c if point p ret
  • 使用 EclipseLink JPA 将 XML 类型存储到 PostgreSQL

    我是 JPA 新手 我有一个关于如何使用 JPA 将 XML 类型存储到 PostgreSQL 的问题 我只是扩展现有的 POJO 以将附加的 XML 字段保留到列中 POJO 看起来像这样 我故意省略了一堆其他列以使其更短 在添加这个额外