[hibernate-commits] Hibernate SVN: r12762 - in trunk/HibernateExt/annotations/src: test/org/hibernate/test/annotations/cid and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Jul 12 19:17:46 EDT 2007


Author: epbernard
Date: 2007-07-12 19:17:46 -0400 (Thu, 12 Jul 2007)
New Revision: 12762

Added:
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/A.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/AId.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/B.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/C.java
Modified:
   trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java
   trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java
Log:
ANN-619 @OneToOne in PK is never a trueOneToOne

Modified: trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java	2007-07-12 22:53:23 UTC (rev 12761)
+++ trunk/HibernateExt/annotations/src/java/org/hibernate/cfg/AnnotationBinder.java	2007-07-12 23:17:46 UTC (rev 12762)
@@ -121,6 +121,7 @@
 import org.hibernate.mapping.Subclass;
 import org.hibernate.mapping.ToOne;
 import org.hibernate.mapping.UnionSubclass;
+import org.hibernate.mapping.KeyValue;
 import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
 import org.hibernate.persister.entity.SingleTableEntityPersister;
 import org.hibernate.persister.entity.UnionSubclassEntityPersister;
@@ -1977,18 +1978,26 @@
 		boolean mapToPK = true;
 		if ( !trueOneToOne ) {
 			//try to find a hidden true one to one (FK == PK columns)
-			Iterator idColumns = propertyHolder.getIdentifier().getColumnIterator();
-			List<String> idColumnNames = new ArrayList<String>();
-			org.hibernate.mapping.Column currentColumn;
-			while ( idColumns.hasNext() ) {
-				currentColumn = (org.hibernate.mapping.Column) idColumns.next();
-				idColumnNames.add( currentColumn.getName() );
+			KeyValue identifier = propertyHolder.getIdentifier();
+			if (identifier == null) {
+				//this is a @OneToOne in a @EmbeddedId (the persistentClass.identifier is not set yet, it's being built)
+				//by definition the PK cannot refers to itself so it cannot map to itself
+				mapToPK = false;
 			}
-			for ( Ejb3JoinColumn col : joinColumns ) {
-				if ( !idColumnNames.contains( col.getMappingColumn().getName() ) ) {
-					mapToPK = false;
-					break;
+			else {
+				Iterator idColumns = identifier.getColumnIterator();
+				List<String> idColumnNames = new ArrayList<String>();
+				org.hibernate.mapping.Column currentColumn;
+				while ( idColumns.hasNext() ) {
+					currentColumn = (org.hibernate.mapping.Column) idColumns.next();
+					idColumnNames.add( currentColumn.getName() );
 				}
+				for ( Ejb3JoinColumn col : joinColumns ) {
+					if ( !idColumnNames.contains( col.getMappingColumn().getName() ) ) {
+						mapToPK = false;
+						break;
+					}
+				}
 			}
 		}
 		if ( trueOneToOne || mapToPK || !BinderHelper.isDefault( mappedBy ) ) {

Added: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/A.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/A.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/A.java	2007-07-12 23:17:46 UTC (rev 12762)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+
+/**
+ * @author Artur Legan
+ *
+ */
+ at Entity
+public class A implements Serializable{
+
+	@EmbeddedId
+	private AId aId;
+
+	public AId getAId() {
+		return aId;
+	}
+
+	public void setAId(AId aId) {
+		this.aId = aId;
+	}
+}

Added: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/AId.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/AId.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/AId.java	2007-07-12 23:17:46 UTC (rev 12762)
@@ -0,0 +1,40 @@
+//$Id$
+package org.hibernate.test.annotations.cid;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+
+
+/**
+ * @author Artur Legan
+ */
+ at Embeddable
+public class AId implements Serializable {
+
+	@OneToOne
+	@JoinColumn( name = "bid" )
+	private B b;
+
+	@OneToOne
+	@JoinColumn( name = "cid" )
+	private C c;
+
+
+	public B getB() {
+		return b;
+	}
+
+	public void setB(B b) {
+		this.b = b;
+	}
+
+	public C getC() {
+		return c;
+	}
+
+	public void setC(C c) {
+		this.c = c;
+	}
+}

Added: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/B.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/B.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/B.java	2007-07-12 23:17:46 UTC (rev 12762)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+
+/**
+ * @author Artur Legan
+ */
+ at Entity
+public class B {
+
+	@Id
+	@GeneratedValue
+	private Long id;
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}
\ No newline at end of file

Added: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/C.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/C.java	                        (rev 0)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/C.java	2007-07-12 23:17:46 UTC (rev 12762)
@@ -0,0 +1,27 @@
+//$Id$
+package org.hibernate.test.annotations.cid;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+
+/**
+ * @author Artur Legan
+ */
+ at Entity
+public class C {
+
+	@Id
+	@GeneratedValue
+	private Long id;
+
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

Modified: trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java
===================================================================
--- trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java	2007-07-12 22:53:23 UTC (rev 12761)
+++ trunk/HibernateExt/annotations/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java	2007-07-12 23:17:46 UTC (rev 12762)
@@ -19,6 +19,31 @@
 		super( x );
 	}
 
+	public void testOneToOneInCompositePk() throws Exception {
+		Session s;
+		Transaction tx;
+		s = openSession();
+		tx = s.beginTransaction();
+		B b = new B();
+		C c = new C();
+		s.persist( b );
+		s.persist( c );
+		A a = new A();
+		a.setAId( new AId() );
+		a.getAId().setB( b );
+		a.getAId().setC( c );
+		s.persist( a );
+		s.flush();
+		s.clear();
+
+		a = (A) s.get(A.class, a.getAId() );
+		assertEquals( b.getId(), a.getAId().getB().getId() );
+
+		tx.rollback();
+		s.close();
+	}
+
+
 	/**
 	 * This feature is not supported by the EJB3
 	 * this is an hibernate extension
@@ -246,7 +271,10 @@
 				Product.class,
 				OrderLine.class,
 				OrderLinePk.class,
-				LittleGenius.class
+				LittleGenius.class,
+				A.class,
+				B.class,
+				C.class
 		};
 	}
 }




More information about the hibernate-commits mailing list