diff --git a/testsuite/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlOneToManyTest.java b/testsuite/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlOneToManyTest.java
index 97511dd5a4..5c9db77c50 100644
--- a/testsuite/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlOneToManyTest.java
+++ b/testsuite/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlOneToManyTest.java
@@ -352,7 +352,6 @@ public class Ejb3XmlOneToManyTest extends Ejb3XmlTestCase {
assertEquals( 0, joinTableAnno.joinColumns().length );
assertEquals( 0, joinTableAnno.inverseJoinColumns().length );
assertEquals( 0, joinTableAnno.uniqueConstraints().length );
-
}
public void testJoinTableAllChildren() throws Exception {
diff --git a/testsuite/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlOnetoOneTest.java b/testsuite/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlOnetoOneTest.java
new file mode 100644
index 0000000000..b1f86b6115
--- /dev/null
+++ b/testsuite/src/test/java/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlOnetoOneTest.java
@@ -0,0 +1,296 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010 by Red Hat Inc and/or its affiliates or by
+ * third-party contributors as indicated by either @author tags or express
+ * copyright attribution statements applied by the authors. All
+ * third-party contributions are distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ */
+
+package org.hibernate.test.annotations.xml.ejb3;
+
+import javax.persistence.Access;
+import javax.persistence.AccessType;
+import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.JoinTable;
+import javax.persistence.MapsId;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.PrimaryKeyJoinColumns;
+import javax.persistence.UniqueConstraint;
+
+public class Ejb3XmlOnetoOneTest extends Ejb3XmlTestCase {
+ public void testNoChildren() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm1.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ assertAnnotationNotPresent( MapsId.class );
+ assertAnnotationNotPresent( Id.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumn.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumns.class );
+ assertAnnotationNotPresent( JoinColumns.class );
+ assertAnnotationNotPresent( JoinColumn.class );
+ assertAnnotationNotPresent( JoinTable.class );
+ assertAnnotationNotPresent( Access.class );
+ OneToOne relAnno = reader.getAnnotation( OneToOne.class );
+ assertEquals( 0, relAnno.cascade().length );
+ assertEquals( FetchType.EAGER, relAnno.fetch() );
+ assertEquals( "", relAnno.mappedBy() );
+ assertTrue( relAnno.optional() );
+ assertFalse( relAnno.orphanRemoval() );
+ assertEquals( void.class, relAnno.targetEntity() );
+ }
+
+ /**
+ * When there's a single primary key join column, we still wrap it with
+ * a PrimaryKeyJoinColumns annotation.
+ */
+ public void testSinglePrimaryKeyJoinColumn() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm2.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumn.class );
+ assertAnnotationPresent( PrimaryKeyJoinColumns.class );
+ PrimaryKeyJoinColumns joinColumnsAnno =
+ reader.getAnnotation( PrimaryKeyJoinColumns.class );
+ assertAnnotationNotPresent( JoinColumns.class );
+ assertAnnotationNotPresent( JoinColumn.class );
+ assertAnnotationNotPresent( JoinTable.class );
+ PrimaryKeyJoinColumn[] joinColumns = joinColumnsAnno.value();
+ assertEquals( 1, joinColumns.length );
+ assertEquals( "col1", joinColumns[0].name() );
+ assertEquals( "col2", joinColumns[0].referencedColumnName() );
+ assertEquals( "int", joinColumns[0].columnDefinition() );
+ }
+
+ public void testMultiplePrimaryKeyJoinColumn() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm3.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumn.class );
+ assertAnnotationPresent( PrimaryKeyJoinColumns.class );
+ assertAnnotationNotPresent( JoinColumns.class );
+ assertAnnotationNotPresent( JoinColumn.class );
+ assertAnnotationNotPresent( JoinTable.class );
+ PrimaryKeyJoinColumns joinColumnsAnno =
+ reader.getAnnotation( PrimaryKeyJoinColumns.class );
+ PrimaryKeyJoinColumn[] joinColumns = joinColumnsAnno.value();
+ assertEquals( 2, joinColumns.length );
+ assertEquals( "", joinColumns[0].name() );
+ assertEquals( "", joinColumns[0].referencedColumnName() );
+ assertEquals( "", joinColumns[0].columnDefinition() );
+ assertEquals( "col1", joinColumns[1].name() );
+ assertEquals( "col2", joinColumns[1].referencedColumnName() );
+ assertEquals( "int", joinColumns[1].columnDefinition() );
+
+ }
+
+ /**
+ * When there's a single join column, we still wrap it with a JoinColumns
+ * annotation.
+ */
+ public void testSingleJoinColumn() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm4.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumn.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumns.class );
+ assertAnnotationPresent( JoinColumns.class );
+ assertAnnotationNotPresent( JoinColumn.class );
+ assertAnnotationNotPresent( JoinTable.class );
+ JoinColumns joinColumnsAnno = reader.getAnnotation( JoinColumns.class );
+ JoinColumn[] joinColumns = joinColumnsAnno.value();
+ assertEquals( 1, joinColumns.length );
+ assertEquals( "col1", joinColumns[0].name() );
+ assertEquals( "col2", joinColumns[0].referencedColumnName() );
+ assertEquals( "table1", joinColumns[0].table() );
+ }
+
+ public void testMultipleJoinColumns() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm5.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumn.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumns.class );
+ assertAnnotationNotPresent( JoinColumn.class );
+ assertAnnotationPresent( JoinColumns.class );
+ assertAnnotationNotPresent( JoinTable.class );
+ JoinColumns joinColumnsAnno = reader.getAnnotation( JoinColumns.class );
+ JoinColumn[] joinColumns = joinColumnsAnno.value();
+ assertEquals( 2, joinColumns.length );
+ assertEquals( "", joinColumns[0].name() );
+ assertEquals( "", joinColumns[0].referencedColumnName() );
+ assertEquals( "", joinColumns[0].table() );
+ assertEquals( "", joinColumns[0].columnDefinition() );
+ assertTrue( joinColumns[0].insertable() );
+ assertTrue( joinColumns[0].updatable() );
+ assertTrue( joinColumns[0].nullable() );
+ assertFalse( joinColumns[0].unique() );
+ assertEquals( "col1", joinColumns[1].name() );
+ assertEquals( "col2", joinColumns[1].referencedColumnName() );
+ assertEquals( "table1", joinColumns[1].table() );
+ assertEquals( "int", joinColumns[1].columnDefinition() );
+ assertFalse( joinColumns[1].insertable() );
+ assertFalse( joinColumns[1].updatable() );
+ assertFalse( joinColumns[1].nullable() );
+ assertTrue( joinColumns[1].unique() );
+ }
+
+ public void testJoinTableNoChildren() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm6.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumn.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumns.class );
+ assertAnnotationPresent( JoinTable.class );
+ assertAnnotationNotPresent( JoinColumns.class );
+ assertAnnotationNotPresent( JoinColumn.class );
+ JoinTable joinTableAnno = reader.getAnnotation( JoinTable.class );
+ assertEquals( "", joinTableAnno.catalog() );
+ assertEquals( "", joinTableAnno.name() );
+ assertEquals( "", joinTableAnno.schema() );
+ assertEquals( 0, joinTableAnno.joinColumns().length );
+ assertEquals( 0, joinTableAnno.inverseJoinColumns().length );
+ assertEquals( 0, joinTableAnno.uniqueConstraints().length );
+ }
+
+ public void testJoinTableAllChildren() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm7.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumn.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumns.class );
+ assertAnnotationPresent( JoinTable.class );
+ assertAnnotationNotPresent( JoinColumns.class );
+ assertAnnotationNotPresent( JoinColumn.class );
+ JoinTable joinTableAnno = reader.getAnnotation( JoinTable.class );
+ assertEquals( "cat1", joinTableAnno.catalog() );
+ assertEquals( "table1", joinTableAnno.name() );
+ assertEquals( "schema1", joinTableAnno.schema() );
+
+ // JoinColumns
+ JoinColumn[] joinColumns = joinTableAnno.joinColumns();
+ assertEquals( 2, joinColumns.length );
+ assertEquals( "", joinColumns[0].name() );
+ assertEquals( "", joinColumns[0].referencedColumnName() );
+ assertEquals( "", joinColumns[0].table() );
+ assertEquals( "", joinColumns[0].columnDefinition() );
+ assertTrue( joinColumns[0].insertable() );
+ assertTrue( joinColumns[0].updatable() );
+ assertTrue( joinColumns[0].nullable() );
+ assertFalse( joinColumns[0].unique() );
+ assertEquals( "col1", joinColumns[1].name() );
+ assertEquals( "col2", joinColumns[1].referencedColumnName() );
+ assertEquals( "table2", joinColumns[1].table() );
+ assertEquals( "int", joinColumns[1].columnDefinition() );
+ assertFalse( joinColumns[1].insertable() );
+ assertFalse( joinColumns[1].updatable() );
+ assertFalse( joinColumns[1].nullable() );
+ assertTrue( joinColumns[1].unique() );
+
+ // InverseJoinColumns
+ JoinColumn[] inverseJoinColumns = joinTableAnno.inverseJoinColumns();
+ assertEquals( 2, inverseJoinColumns.length );
+ assertEquals( "", inverseJoinColumns[0].name() );
+ assertEquals( "", inverseJoinColumns[0].referencedColumnName() );
+ assertEquals( "", inverseJoinColumns[0].table() );
+ assertEquals( "", inverseJoinColumns[0].columnDefinition() );
+ assertTrue( inverseJoinColumns[0].insertable() );
+ assertTrue( inverseJoinColumns[0].updatable() );
+ assertTrue( inverseJoinColumns[0].nullable() );
+ assertFalse( inverseJoinColumns[0].unique() );
+ assertEquals( "col3", inverseJoinColumns[1].name() );
+ assertEquals( "col4", inverseJoinColumns[1].referencedColumnName() );
+ assertEquals( "table3", inverseJoinColumns[1].table() );
+ assertEquals( "int", inverseJoinColumns[1].columnDefinition() );
+ assertFalse( inverseJoinColumns[1].insertable() );
+ assertFalse( inverseJoinColumns[1].updatable() );
+ assertFalse( inverseJoinColumns[1].nullable() );
+ assertTrue( inverseJoinColumns[1].unique() );
+
+ // UniqueConstraints
+ UniqueConstraint[] uniqueConstraints = joinTableAnno
+ .uniqueConstraints();
+ assertEquals( 2, uniqueConstraints.length );
+ assertEquals( 1, uniqueConstraints[0].columnNames().length );
+ assertEquals( "col5", uniqueConstraints[0].columnNames()[0] );
+ assertEquals( 2, uniqueConstraints[1].columnNames().length );
+ assertEquals( "col6", uniqueConstraints[1].columnNames()[0] );
+ assertEquals( "col7", uniqueConstraints[1].columnNames()[1] );
+ }
+
+ public void testCascadeAll() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm8.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ OneToOne relAnno = reader.getAnnotation( OneToOne.class );
+ assertEquals( 1, relAnno.cascade().length );
+ assertEquals( CascadeType.ALL, relAnno.cascade()[0] );
+ }
+
+ public void testCascadeSomeWithDefaultPersist() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm9.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ OneToOne relAnno = reader.getAnnotation( OneToOne.class );
+ assertEquals( 4, relAnno.cascade().length );
+ assertEquals( CascadeType.REMOVE, relAnno.cascade()[0] );
+ assertEquals( CascadeType.REFRESH, relAnno.cascade()[1] );
+ assertEquals( CascadeType.DETACH, relAnno.cascade()[2] );
+ assertEquals( CascadeType.PERSIST, relAnno.cascade()[3] );
+ }
+
+ /**
+ * Make sure that it doesn't break the handler when {@link CascadeType#ALL}
+ * is specified in addition to a default cascade-persist or individual
+ * cascade settings.
+ */
+ public void testCascadeAllPlusMore() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm10.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ OneToOne relAnno = reader.getAnnotation( OneToOne.class );
+ assertEquals( 6, relAnno.cascade().length );
+ assertEquals( CascadeType.ALL, relAnno.cascade()[0] );
+ assertEquals( CascadeType.PERSIST, relAnno.cascade()[1] );
+ assertEquals( CascadeType.MERGE, relAnno.cascade()[2] );
+ assertEquals( CascadeType.REMOVE, relAnno.cascade()[3] );
+ assertEquals( CascadeType.REFRESH, relAnno.cascade()[4] );
+ assertEquals( CascadeType.DETACH, relAnno.cascade()[5] );
+ }
+
+ public void testAllAttributes() throws Exception {
+ reader = getReader( Entity1.class, "field1", "one-to-one.orm11.xml" );
+ assertAnnotationPresent( OneToOne.class );
+ assertAnnotationPresent( MapsId.class );
+ assertAnnotationPresent( Id.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumn.class );
+ assertAnnotationNotPresent( PrimaryKeyJoinColumns.class );
+ assertAnnotationNotPresent( JoinColumns.class );
+ assertAnnotationNotPresent( JoinColumn.class );
+ assertAnnotationNotPresent( JoinTable.class );
+ assertAnnotationPresent( Access.class );
+ OneToOne relAnno = reader.getAnnotation( OneToOne.class );
+ assertEquals( 0, relAnno.cascade().length );
+ assertEquals( FetchType.LAZY, relAnno.fetch() );
+ assertEquals( "field2", relAnno.mappedBy() );
+ assertFalse( relAnno.optional() );
+ assertTrue( relAnno.orphanRemoval() );
+ assertEquals( Entity3.class, relAnno.targetEntity() );
+ assertEquals( AccessType.PROPERTY, reader.getAnnotation( Access.class )
+ .value() );
+ assertEquals( "field3", reader.getAnnotation( MapsId.class )
+ .value() );
+ }
+
+ //TODO: tests for merging/overriding
+}
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm1.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm1.xml
new file mode 100644
index 0000000000..2c4ad59e55
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm1.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm10.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm10.xml
new file mode 100644
index 0000000000..cdf9acb1e3
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm10.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm11.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm11.xml
new file mode 100644
index 0000000000..b7a524d073
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm11.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm2.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm2.xml
new file mode 100644
index 0000000000..2e3e4db3b3
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm2.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm3.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm3.xml
new file mode 100644
index 0000000000..9c46a9f0c5
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm3.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm4.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm4.xml
new file mode 100644
index 0000000000..2664a975ff
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm4.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm5.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm5.xml
new file mode 100644
index 0000000000..b11d988759
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm5.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm6.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm6.xml
new file mode 100644
index 0000000000..b522b4d519
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm6.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm7.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm7.xml
new file mode 100644
index 0000000000..aa24986324
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm7.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
+
+
+
+ col5
+
+
+ col6
+ col7
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm8.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm8.xml
new file mode 100644
index 0000000000..afb67260cb
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm8.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
+
+
+
+
diff --git a/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm9.xml b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm9.xml
new file mode 100644
index 0000000000..381c2da3bb
--- /dev/null
+++ b/testsuite/src/test/resources/org/hibernate/test/annotations/xml/ejb3/one-to-one.orm9.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.test.annotations.xml.ejb3
+
+
+
+
+
+
+
+
+
+
+
+