Adding vendor-specific annotations

Adding vendor-specific annotations

Hyperjaxb3 does not generate any vendor-specific annotations or mappings, only standard JPA. The main reason for this is that vendor-specific support is extremely effort-consuming, I can't handle such efforts in the frame of a non-commercial product.

If you have a high-profile project which need vendor-specific extensions and ready to invest in development, you may get in contact with me.

Having stated that, there is still a solution which allows you adding vendor-specific annotations to the generated classes. This solution is based on the Annotate plugin which I've developed in the frame of the JAXB2 Basics project.

Here's a short overview of this solution:

Basically, you let Hyperjaxb3 generate standard JPA annotations and add non-standard (verndor-specific) things via customizations.

Hibernate Annotations example

I'll demonstrate it by the example of Hibernate Annotations.

Assume we want to add a DELETE_ORPHAN cascade to the one-to-many property:

@OneToMany(targetEntity = Foo.class, cascade = {       
    javax.persistence.CascadeType.ALL                  
})                                                     
@org.hibernate.annotations.Cascade({                                             
    org.hibernate.annotations.CascadeType.DELETE_ORPHAN
})
public List<Foo> getFoos() {...}

The @OneToMany is a standard JPA annotation which is generated by Hyperjaxb3. However @org.hibernate.annotations.Cascade is Hibernate-specific annotation which is not handled by Hyperjaxb3. We'll need the Annotate plugin for this.

Including the annotation library to the classpath

First of all you must make the annotation library (Hibernate Annotations in this case) available by adding it to the dependencies of the maven-hyperjaxb3-plugin:

<plugin>
	<groupId>org.jvnet.hyperjaxb3</groupId>
	<artifactId>maven-hyperjaxb3-plugin</artifactId>
	<configuration>
		...
	</configuration>
	<dependencies>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-annotations</artifactId>
			<version>3.4.0.GA</version>
		</dependency>
	</dependencies>
</plugin>

Turning on the Annotate plugin

Next we'll need to turn on the Annotate plugin:

<plugin>
	<groupId>org.jvnet.hyperjaxb3</groupId>
	<artifactId>maven-hyperjaxb3-plugin</artifactId>
	<configuration>
		...
		<args>
			<arg>-Xannotate</arg>
		</args>
	</configuration>
	<dependencies>...</dependencies>
</plugin>

Adding customization elements

Now we're ready to customize:

<xs:schema
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
	xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"

	xmlns:hj="http://hyperjaxb3.jvnet.org/ejb/schemas/customizations"
	xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"

	xmlns:annox="http://annox.dev.java.net"
	xmlns:ha="http://annox.dev.java.net/org.hibernate.annotations"

	jaxb:extensionBindingPrefixes="hj orm xjc annox"
	jaxb:version="2.1" ... >

	<!-- ... -->

	<xs:complexType name="...">
		<xs:sequence>
			<xs:element name="foo" type="test:foo" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:appinfo>
						<annox:annotate>
							<ha:Cascade value="DELETE_ORPHAN"/>
						</annox:annotate>
					</xs:appinfo>
				</xs:annotation>
			</xs:element>
			<!-- ... -->
		</xs:sequence>
	</xs:complexType>

	<!-- ... -->

</xs:schema>
Please see the Annotate plugin documentation and Annox user guide for more information on formulation your Java annotations in XML.
See the cu-one test project for the working example.

Browse Space

- Pages
- News
- Labels
- Attachments
- Bookmarks
- Mail
- Activity
- Advanced

Explore Confluence

- Popular Labels
- Notation Guide
- Impressum

Your Account

Log In

 

Other Features

Add Content