Network Deployment (Distributed operating systems), v8.0 > Develop and deploying applications > Develop EJB applications > Develop applications that use the Java Persistence API


Map persistent properties to XML columns for JPA

If your database supports XML column types, you 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.

Attention: Support for mapping persistent properties to XML columns is no longer a WAS 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 by 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.


Procedure

  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 by using the Java Architecture for XML Binding Compiler (XJC).

  4. Make sure that 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.


Related


Develop JPA 2.x applications for a Java SE environment
Develop JPA 2.x applications for a Java EE environment


Related


wsenhancer command
Apache OpenJPA User Guide: XML Mapping

+

Search Tips   |   Advanced Search