WAS v8.5 > Develop applications > Develop EJB applications > Develop applications that use the Java Persistence API

Map persistent properties to XML columns for JPA

If the database supports XML column types, we can use mapping tools to manage XML objects. You have the choice of mapping XML columns to a Java string or a Java byte array field. Support for mapping persistent properties to XML columns is no longer a WebSphere Application Server for JPA extension. We can find information regarding XML mapping in the Apache OpenJPA documentation.

JPA for the application server supports the management of XML objects using a third-party solution for mapping management. These mapping techniques make using the XML objects as strings or byte arrays difficult.

DB2 , Oracle, and SQLServer databases support XML column types, XPath queries, and indices over these columns.

Persistent properties to XML mapping

An embedded class with XML column support must use XML marshaling to write the data to the XML column and unmarshalling to retrieve the data from the XML column. The path expressions and predicates over the embedded class are converted to XML predicates, XPATH expressions, or XQuery expressions and are written to the database.

WAS supports JPA applications to use a third-party tool for XML mapping. This is done through the extension points for custom field mappings. The third-party mapping tool uses the extension points by providing a custom value handler for the persistent fields that are mapped to the XML columns. In OpenJPA, this value handler is named org.apache.openjpa.xmlmapping.XmlValueHandler and this handler requires the @Strategy annotation on the Java field that is mapped to the XML column.

  1. Annotate the entity property using the XML value handler strategy. The mapping of persistent properties to XML columns requires the @Strategy and the @Persistent annotation.
    @Persistent
    @Strategy("org.apache.openjpa.xmlmapping.XmlValueHandler")

    The XML value handler for the persistent property is set to org.apache.openjpa.xmlmapping.XmlValueHandler.

  2. Change the default for fetch type if it is necessary. For example:

      @Persistence(fetch=FetchType.LAZY)

    The fetch type is now LAZY. If a value for the fetch type is not entered, the default is set to EAGER.

  3. Annotate your embedded classes with the binding annotations for Java API for XML Binding (JAXB). These bindings can be created from an XML schema using the Java Architecture for XML Binding Compiler (XJC).
  4. Verify the class that maps to the root of the XML document is annotated with @XmlRootElement, in addition to the other annotations.
  5. Compile your Java sources.

  6. Run the enhancer tool on the entities. Refer to the topic on the entity enhancer tool for more information.


Example

For example, shipAddress, a property of Order Entity, is mapped to XML column shipaddr:

@Entity
public class Order {
 @Id 
 @GeneratedValue(strategy=GenerationType.IDENTITY)
  int oid;
 @Persistent
 @Strategy("org.apache.openjpa.xmlmapping.XmlValueHandler")
      @Column(name="shipaddr")
      Address shipAddress;
…

The OpenJPA mapping tool generates a SHIPADDR column with XML type in the table definition for ORDER table.


Subtopics


Related


Develop JPA 2.x applications for a Java EE environment


Reference:

wsenhancer command


Related information:

Apache OpenJPA User Guide: XML Mapping


+

Search Tips   |   Advanced Search