如何使用JPA/Hibernate映射XMLType

3
如何通过JPA/Hibernate持久化XMLType列?根据Oracle文档,声明XMLType存储子句有两种方式:LOB和对象关系。我不想选择LOB。我已经有了模式并将其注册到数据库中。但是我没有关于如何设计XMLType实体的示例。如果有人知道,请分享一下吧。
3个回答

2

对于我而言,这个方法很有效(JPA 2.1和Hibernate 5.1.0):

  • 将实体中的字段创建为字符串。
  • 使用Hibernate的@ColumnTransformer注释来定义如何读取和写入列。
  • 在@Column中设置columnDefinition为"XMLType"

    @ColumnTransformer(read = "to_clob(columnName)", write = "?")
    @Column(name = "COLUMN_NAME", columnDefinition = "XMLType")
    private String columnName;


如果超过4,000个字符,这将失败。 - Michael Munsey

1

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


谢谢。但是当我尝试通过JPA entitymanager进行持久化时,我遇到了以下SQL异常。我已经按照您在博客中提供的步骤完成了以下操作:
创建了hibernate usertype类 实体指向@Type("HibernateXMLType") 将Document作为字段

SQL异常

java.sql.SQLException: 无法将文档转换为字符串以进行存储
- Moorthy
@Moorthy:请在您的问题中更新问题,因为在评论框中无法阅读。 - Pascal Thivent
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冲突请给出一些解决方法。 - Moorthy

0

自定义的Java类HibernateXMLType对于CLOB运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接