[hibernate-commits] Hibernate SVN: r18627 - in core/trunk/annotations/src: test/java/org/hibernate/test/annotations/derivedidentities and 2 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Tue Jan 26 08:26:08 EST 2010
Author: epbernard
Date: 2010-01-26 08:26:07 -0500 (Tue, 26 Jan 2010)
New Revision: 18627
Added:
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeDepTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/MedicalHistory.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/Person.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/PersonId.java
Modified:
core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
Log:
HHH-4529 Add support for parent's id as IdClass and derived entity reusing the same PK class than the parent
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2010-01-26 13:08:02 UTC (rev 18626)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2010-01-26 13:26:07 UTC (rev 18627)
@@ -2000,9 +2000,9 @@
+ " must not have @Id properties when used as an @EmbeddedId: "
+ BinderHelper.getPath( propertyHolder, inferredData ) );
}
- if ( comp.getPropertySpan() == 0 ) {
+ if ( referencedEntityName == null && comp.getPropertySpan() == 0 ) {
throw new AnnotationException( comp.getComponentClassName()
- + " has no persistent id property"
+ + " has no persistent id property: "
+ BinderHelper.getPath( propertyHolder, inferredData ) );
}
}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeDepTest.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeDepTest.java 2010-01-26 13:26:07 UTC (rev 18627)
@@ -0,0 +1,45 @@
+package org.hibernate.test.annotations.derivedidentities.e5.b;
+
+import java.util.Date;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.util.SchemaUtil;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DerivedIdentityIdClassParentSameIdTypeDepTest extends TestCase {
+
+ public void testOneToOneExplicitJoinColumn() throws Exception {
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK1", getCfg() ) );
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK2", getCfg() ) );
+ assertTrue( ! SchemaUtil.isColumnPresent( "MedicalHistory", "firstname", getCfg() ) );
+ Person e = new Person();
+ e.firstName = "Emmanuel";
+ e.lastName = "Bernard";
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( e );
+ MedicalHistory d = new MedicalHistory();
+ d.id = new PersonId();
+ d.id.firstName = "Emmanuel"; //FIXME not needed when foreign is enabled
+ d.id.lastName = "Bernard"; //FIXME not needed when foreign is enabled
+ d.patient = e;
+ s.persist( d );
+ s.flush();
+ s.clear();
+ d = (MedicalHistory) s.get( MedicalHistory.class, d.id );
+ assertEquals( d.id.firstName, d.patient.firstName );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ @Override
+ protected Class<?>[] getAnnotatedClasses() {
+ return new Class<?>[] {
+ MedicalHistory.class,
+ Person.class
+ };
+ }
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/MedicalHistory.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/MedicalHistory.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/MedicalHistory.java 2010-01-26 13:26:07 UTC (rev 18627)
@@ -0,0 +1,27 @@
+package org.hibernate.test.annotations.derivedidentities.e5.b;
+
+import java.util.Date;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.MapsId;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class MedicalHistory {
+ //all attributes map to relationship: AttributeOverride not allowed
+ @EmbeddedId
+ PersonId id;
+
+ @MapsId
+ @JoinColumns({
+ @JoinColumn(name = "FK1", referencedColumnName = "firstName"),
+ @JoinColumn(name = "FK2", referencedColumnName = "lastName")
+ })
+ @OneToOne
+ Person patient;
+}
\ No newline at end of file
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/Person.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/Person.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/Person.java 2010-01-26 13:26:07 UTC (rev 18627)
@@ -0,0 +1,17 @@
+package org.hibernate.test.annotations.derivedidentities.e5.b;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at IdClass(PersonId.class)
+public class Person {
+ @Id
+ String firstName;
+ @Id
+ String lastName;
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/PersonId.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/PersonId.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/PersonId.java 2010-01-26 13:26:07 UTC (rev 18627)
@@ -0,0 +1,11 @@
+package org.hibernate.test.annotations.derivedidentities.e5.b;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PersonId implements Serializable {
+ String firstName;
+ String lastName;
+}
More information about the hibernate-commits
mailing list