Mapping persistent properties to XML columns for JPA

If your database supports Extensible Markup Language (XML) column types, you can use mapping tools to manage XML objects. The Java™ Persistence API (JPA) specification does not contain support for mapping XML columns to Java objects. You have the choice of mapping XML columns to a Java string or a Java byte array field. These mapping techniques make using the XML objects as strings or byte arrays difficult. JPA for the application server allows you to simplify the management of XML objects by using a third-party solution for mapping management.

About this task

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 needs to use XML marshalling 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.

WebSphere® Application Server allows 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.




In this information ...


Related reference

IBM Redbooks, demos, education, and more

(Index)

Use IBM Suggests to retrieve related content from ibm.com and beyond, identified for your convenience.

This feature requires Internet access.

Task topic    

Terms of Use | Feedback

Last updated: Oct 21, 2010 1:44:59 AM CDT
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=compass&product=was-express-dist&topic=tejb_jpaColMap
File name: tejb_jpaColMap.html