如何用 JPA/Hibernate 映射 XMLType

Posted

技术标签:

【中文标题】如何用 JPA/Hibernate 映射 XMLType【英文标题】:How to map XMLType with JPA/Hibernate 【发布时间】:2010-06-17 18:09:55 【问题描述】:

如何通过 JPA/Hibernate 持久化 XMLType 列?根据 oracle 文档,有两种方法可以为 XMLType 声明存储子句。它们是 LOB 和对象关系。我不想和LOB一起去。我有架构并注册到数据库中。我没有关于如何为 XMLType 设计我的实体的示例。有谁知道请分享一下?

【问题讨论】:

【参考方案1】:

这对我来说很好用(JPA 2.1 和 Hibernate 5.1.0):

将实体中的字段创建为字符串。 使用 Hibernate 中的 @ColumnTransformer 注解来定义如何从列中读取和写入。

将@Column 中的columnDefinition 设置为“XMLType”

@ColumnTransformer(read = "to_clob(columnName)", write = "?") @Column(name = "COLUMN_NAME", columnDefinition = "XMLType") 私有字符串列名;

【讨论】:

超过 4,000 个字符会失败。【参考方案2】:

我会使用自定义的UserType(Hibernate 扩展)。博客文章Hibernate with Oracle XmlType 提供了一个您可以重用的实现。然后,使用 Type 注释声明您的自定义 UserType

【讨论】:

谢谢。但是当我尝试通过 JPA 实体管理器坚持时,我得到了这个 SQL 异常。我已经完成了您在博客中提供的内容>创建的休眠用户类型类>指向@Type(“HibernateXMLType”)的实体>文档作为字段SQL Exception ------------- java.sql.SQLException : 无法将 Document 转换为 String 以进行存储 @Moorthy:请用问题更新您的问题,在评论框中无法阅读。 Oracle xml 解析器 xmlparserv2.jar 导致了该问题。如果我删除它,HibernateXMLType 类会从 xmlType = XMLType.createXML(st.getConnection(),..) java.lang.NoClassDefFoundError: oracle/xml/parser/v2/XMLParseException at com.tutorial.hibernate 行抛出以下异常.HibernateXMLType.nullSafeSet(HibernateXMLType.java:112) 我知道这个解析器与 javax.xml..parser 冲突请说明如何解决它。【参考方案3】:

自定义 java 类 HibernateXMLType 适用于 CLOB。

【讨论】:

以上是关于如何用 JPA/Hibernate 映射 XMLType的主要内容,如果未能解决你的问题,请参考以下文章

JPA Hibernate jpa spring data jpa

如何处理 JPA @OneToOne 映射中的“孤立”行

Spring boot之 JPA/Hibernate/Spring Data

JPA/Hibernate 映射:“QuerySyntaxException:播放器未映射……”

JPA(Hibernate)上的多个双向映射问题

在 JPA/Hibernate 中持久化映射到 MySQL 视图的实体