如何用 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
Spring boot之 JPA/Hibernate/Spring Data