HyperJAXB - relational persistence for XML objects with JAXB and Hibernate

HyperJAXB - relational persistence for XML objects with JAXB and Hibernate

http://www.hibernate.org/218.html

HyperJAXB - relational persistence for XML objects with JAXB and Hibernate

What is HyperJAXB?

HyperJAXB is an add-on for Sun's reference implementation of JAXB (Java Architecture for XML Binding). It provides JAXB objects with relational persistence layer using Hibernate.

What can I do with HyperJAXB?

HyperJAXB eases usage of XML with relational databases. With HyperJAXB you can combine JAXB and Hibernate to implement one of the following target usage scenarios:

  • load (unmarshal) object structure from XML document and save (persist) these objects in a relational database;
  • load objects from a relational database and present (marshal) loaded objects in XML form;
  • query relational database using HQL and present query results in XML.

How it works?

JAXB is basically a code generation engine. It accepts a schematic definition of you XML documents (usually in the form of an XML Schema) as input and generates source code of XML-enabled classes. HyperJAXB augments generated code by adding Hibernate XDoclet annotations. Added annotations effectively define Hibernate O/R mapping for the generated classes.

Combination of JAXB RI, HyperJAXB and Hibernate toolset allows you automatically generate the following artifacts out of you XML Schema:

  • source code of XML-enabled objects with Hibernate XDoclet annotations;
  • object/relational mapping for Hibernate;
  • database schema for the target database.

Please see the reference for more information.

A code example?

Unmarshalling and saving:

// Unmarshall the document
final MyObject myObject = (MyObject) unmarshaller.unmarshal(document);

// Open the session, save object into the database
final Session saveSession = sessionFactory.openSession();
// Save id for the later use
final String id = saveSession.save(myObject);
saveSession.flush();
// Close the session
saveSession.close()

Loading and marshalling:

// Open the session, load the object
final Session loadSession = sessionFactory.openSession();
final MyObject myLoadedObject = (MyObject) loadSession.load(MyObject.class, id);
loadSession.close();

// Marshall loaded object into the document
final Document loadedDocument = documentBuilder.newDocument();
marshaller.marshal(myLoadedObject, loadedDocument);

Mapping generated by HyperJAXB ensures that document and loadedDocument are identical.

Where can I find it?

Check out this project on https://hyperjaxb.dev.java.net.

你可能感兴趣的:(HyperJAXB - relational persistence for XML objects with JAXB and Hibernate)