[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