将持久属性映射至 JPA 的 XML 列

如果数据库支持可扩展标记语言 (XML) 列类型,那么您可以使用映射工具来管理 XML 对象。 您可以选择将 XML 列映射到 Java™ 字符串或 Java 字节数组字段。

有关此任务

注意力:将持久属性映射到 XML 列的支持不再是WebSphere® Application Server用于 JPA 扩展。 可在 Apache OpenJPA 文档中找到有关 XML 映射的信息。

应用程序服务器的 JPA 支持通过使用第三方解决方案管理映射来支持 XML 对象的管理。 这些映射方法使得难于将 XML 对象用作字符串或字节数组。

DB2® ,Oracle,并且 SQLServer 数据库支持 XML 列类型、XPath 查询和这些列的索引。

持久属性至 XML 映射

具有 XML 列支持的嵌入式类需要使用 XML 编组将数据写入 XML 列,而使用取消编组从 XML 列检索数据。 嵌入式类上的路径表达式和谓词均将转换为 XML 谓词、XPATH 表达式或 XQuery 表达式并写入数据库中。

WebSphere Application Server支持JPA应用程序使用第三方工具进行XML映射。 此任务是通过定制字段映射的扩展点完成的。 第三方映射工具通过为已映射至 XML 列的持久字段提供定制值处理程序来使用扩展点。 在OpenJPA,该值处理程序被命名为org.apache.openjpa.xmlmapping.XmlValueHandler并且该处理程序需要映射到 XML 列的 Java 字段上的 @Strategy 注释。

过程

  1. 使用 XML 值处理程序策略对实体属性进行注释。
    持久属性至 XML 列的映射需要 @Strategy 和 @Persistent 注释。
    @Persistent
    @Strategy("org.apache.openjpa.xmlmapping.XmlValueHandler")
    持久属性的 XML 值处理程序被设置为 org.apache.openjpa.xmlmapping.XmlValueHandler。
  2. 必要时更改 fetch 类型的缺省值。
    例如:
    @Persistence(fetch=FetchType.LAZY)
    
    fetch 类型现为 LAZY。 如果未输入 fetch 类型的值,那么缺省值设置为 EAGER。
  3. 使用 Java API for XML Binding (JAXB) 的绑定注释来注释您的嵌入类。
    可以使用 Java 架构 XML 绑定编译器 (XJC) 根据 XML 模式创建这些绑定。
  4. 确保某一映射至 XML 文档根目录的类已使用 @XmlRootElement 及其他注释进行注释。
  5. 编译您的 Java 源代码。
  6. 对实体运行增强器工具。
    请参阅关于实体增强器工具的主题,以了解更多信息。

示例

例如,Order 实体的属性 shipAddress 被映射至 XML 列 shipaddr:
@Entity
public class Order {
	@Id 
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	 int oid;
	@Persistent
	@Strategy("org.apache.openjpa.xmlmapping.XmlValueHandler")
      @Column(name="shipaddr")
      Address shipAddress;
…

OpenJPA 映射工具在 ORDER 表的表定义中生成具有 XML 类型的 SHIPADDR 列。