[hibernate-commits] Hibernate SVN: r18589 - in core/trunk/annotations/src: main/java/org/hibernate/cfg/annotations and 4 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Jan 20 11:51:03 EST 2010


Author: epbernard
Date: 2010-01-20 11:51:02 -0500 (Wed, 20 Jan 2010)
New Revision: 18589

Added:
   core/trunk/annotations/src/main/java/org/hibernate/cfg/ToOneBinder.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/Dependent.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/DependentId.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/DerivedIdentitySimpleParentEmbeddedIdDepTest.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/Employee.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/FinancialHistory.java
Modified:
   core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
   core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationConfiguration.java
   core/trunk/annotations/src/main/java/org/hibernate/cfg/Ejb3JoinColumn.java
   core/trunk/annotations/src/main/java/org/hibernate/cfg/OneToOneSecondPass.java
   core/trunk/annotations/src/main/java/org/hibernate/cfg/SetSimpleValueTypeSecondPass.java
   core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/SimpleValueBinder.java
   core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/TableBinder.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/DerivedIdentitySimpleParentSimpleDepTest.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/MedicalHistory.java
Log:
HHH-4529 support @ManyToOne and fix FK error

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-20 15:35:26 UTC (rev 18588)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -1379,12 +1379,13 @@
 					joinColumn.setSecondaryTableName( join.getTable().getName() );
 				}
 			}
+			final boolean mandatory = !ann.optional() || property.isAnnotationPresent( MapsId.class );
 			bindManyToOne(
 					getCascadeStrategy( ann.cascade(), hibernateCascade, false),
 					joinColumns,
-					ann.optional(),
+					!mandatory,
 					ignoreNotFound, onDeleteCascade,
-					mappings.getReflectionManager().toXClass( ann.targetEntity() ),
+					ToOneBinder.getTargetEntity( inferredData, mappings ),
 					propertyHolder,
 					inferredData, false, isIdentifierMapper, inSecondPass, mappings
 			);
@@ -1422,7 +1423,7 @@
 					!mandatory,
 					getFetchMode( ann.fetch() ),
 					ignoreNotFound, onDeleteCascade,
-					mappings.getReflectionManager().toXClass( ann.targetEntity() ),
+					ToOneBinder.getTargetEntity( inferredData, mappings ),
 					propertyHolder,
 					inferredData, ann.mappedBy(), trueOneToOne, isIdentifierMapper, inSecondPass, mappings
 			);
@@ -2117,11 +2118,14 @@
 			catch ( ClassNotFoundException e ) {
 				throw new AssertionFailure( "Persistence class name cannot be converted into a Class", e);
 			}
+
 			final PropertyData annotatedWithMapsId = mappings.getPropertyAnnotatedWithMapsId( persistentXClass, "" );
 			if ( annotatedWithMapsId != null ) {
 				columns = buildExplicitJoinColumns( propertyHolder, annotatedWithMapsId.getProperty(), annotatedWithMapsId, entityBinder, mappings );
 				if (columns == null) {
 					columns = buildDefaultJoinColumnsForXToOne( propertyHolder, annotatedWithMapsId.getProperty(), annotatedWithMapsId, entityBinder, mappings );
+					throw new UnsupportedOperationException( "Implicit @JoinColumn is not supported on @MapsId properties: "
+							+ annotatedWithMapsId.getDeclaringClass() + " " + annotatedWithMapsId.getPropertyName() );
 				}
 			}
 
@@ -2194,13 +2198,9 @@
 		if ( unique ) {
 			value.markAsLogicalOneToOne();
 		}
-		if ( isDefault( targetEntity, mappings ) ) {
-			value.setReferencedEntityName( inferredData.getClassOrElementName() );
-		}
-		else {
-			value.setReferencedEntityName( targetEntity.getName() );
-		}
-		defineFetchingStrategy( value, inferredData.getProperty() );
+		value.setReferencedEntityName( ToOneBinder.getReferenceEntityName(inferredData, targetEntity, mappings) );
+		final XProperty property = inferredData.getProperty();
+		defineFetchingStrategy( value, property );
 		//value.setFetchMode( fetchMode );
 		value.setIgnoreNotFound( ignoreNotFound );
 		value.setCascadeDeleteEnabled( cascadeOnDelete );
@@ -2210,11 +2210,18 @@
 				column.setNullable( false );
 			}
 		}
+		if ( property.isAnnotationPresent( MapsId.class ) ) {
+			//read only
+			for (Ejb3JoinColumn column : columns) {
+				column.setInsertable( false );
+				column.setUpdatable( false );
+			}
+		}
 		value.setTypeName( inferredData.getClassOrElementName() );
 		final String propertyName = inferredData.getPropertyName();
 		value.setTypeUsingReflection( propertyHolder.getClassName(), propertyName );
 
-		ForeignKey fk = inferredData.getProperty().getAnnotation( ForeignKey.class );
+		ForeignKey fk = property.getAnnotation( ForeignKey.class );
 		String fkName = fk != null ?
 				fk.name() :
 				"";
@@ -2250,7 +2257,7 @@
 		}
 		binder.setAccessType( inferredData.getDefaultAccess() );
 		binder.setCascade( cascadeStrategy );
-		binder.setProperty(inferredData.getProperty());
+		binder.setProperty( property );
 		Property prop = binder.make();
 		//composite FK columns are in the same table so its OK
 		propertyHolder.addProperty( prop, columns, inferredData.getDeclaringClass() );

Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationConfiguration.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationConfiguration.java	2010-01-20 15:35:26 UTC (rev 18588)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationConfiguration.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -374,7 +374,7 @@
 			iter = secondPasses.iterator();
 			while ( iter.hasNext() ) {
 				SecondPass sp = ( SecondPass ) iter.next();
-				//do the SecondaryTable second pass before any association becasue associations can be built on joins
+				//do the SecondaryTable second pass before any association because associations can be built on joins
 				if ( sp instanceof SecondaryTableSecondPass ) {
 					sp.doSecondPass( classes );
 					iter.remove();

Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/Ejb3JoinColumn.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/Ejb3JoinColumn.java	2010-01-20 15:35:26 UTC (rev 18588)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/Ejb3JoinColumn.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -393,6 +393,31 @@
 		String logicalReferencedColumn = getMappings().getLogicalColumnName(
 				referencedColumn.getQuotedName(), referencedEntity.getTable()
 		);
+		columnName = buildDefaultColumnName( referencedEntity, logicalReferencedColumn );
+		//yuk side effect on an implicit column
+		setLogicalColumnName( columnName );
+		setReferencedColumn( logicalReferencedColumn );
+		initMappingColumn(
+				columnName,
+				null, referencedColumn.getLength(),
+				referencedColumn.getPrecision(),
+				referencedColumn.getScale(),
+				getMappingColumn() != null ? getMappingColumn().isNullable() : false,
+				referencedColumn.getSqlType(),
+				getMappingColumn() != null ? getMappingColumn().isUnique() : false,
+			    false
+		);
+		linkWithValue( value );
+	}
+
+	public void addDefaultJoinColumnName(PersistentClass referencedEntity, String logicalReferencedColumn) {
+		final String columnName = buildDefaultColumnName( referencedEntity, logicalReferencedColumn );
+		getMappingColumn().setName( columnName );
+		setLogicalColumnName( columnName );
+	}
+	
+	private String buildDefaultColumnName(PersistentClass referencedEntity, String logicalReferencedColumn) {
+		String columnName;
 		boolean mappedBySide = mappedByTableName != null || mappedByPropertyName != null;
 		boolean ownerSide = getPropertyName() != null;
 
@@ -443,20 +468,7 @@
 				columnName = StringHelper.quote( columnName );
 			}
 		}
-		//yuk side effect on an implicit column
-		setLogicalColumnName( columnName );
-		setReferencedColumn( logicalReferencedColumn );
-		initMappingColumn(
-				columnName,
-				null, referencedColumn.getLength(),
-				referencedColumn.getPrecision(),
-				referencedColumn.getScale(),
-				getMappingColumn() != null ? getMappingColumn().isNullable() : false,
-				referencedColumn.getSqlType(),
-				getMappingColumn() != null ? getMappingColumn().isUnique() : false,
-			    false
-		);
-		linkWithValue( value );
+		return columnName;
 	}
 
 	/**

Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/OneToOneSecondPass.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/OneToOneSecondPass.java	2010-01-20 15:35:26 UTC (rev 18588)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/OneToOneSecondPass.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -88,13 +88,7 @@
 		);
 		final String propertyName = inferredData.getPropertyName();
 		value.setPropertyName( propertyName );
-		String referencedEntityName;
-		if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
-			referencedEntityName = inferredData.getClassOrElementName();
-		}
-		else {
-			referencedEntityName = targetEntity.getName();
-		}
+		String referencedEntityName = ToOneBinder.getReferenceEntityName(inferredData, targetEntity, mappings);
 		value.setReferencedEntityName( referencedEntityName );  
 		AnnotationBinder.defineFetchingStrategy( value, inferredData.getProperty() );
 		//value.setFetchMode( fetchMode );

Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/SetSimpleValueTypeSecondPass.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/SetSimpleValueTypeSecondPass.java	2010-01-20 15:35:26 UTC (rev 18588)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/SetSimpleValueTypeSecondPass.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -34,7 +34,7 @@
 public class SetSimpleValueTypeSecondPass implements SecondPass {
 
 	SimpleValueBinder binder;
-	
+
 	public SetSimpleValueTypeSecondPass(SimpleValueBinder val) {
 		binder = val;
 	}

Added: core/trunk/annotations/src/main/java/org/hibernate/cfg/ToOneBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/ToOneBinder.java	                        (rev 0)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/ToOneBinder.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -0,0 +1,53 @@
+package org.hibernate.cfg;
+
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+
+import org.hibernate.AssertionFailure;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.XProperty;
+
+/**
+ * Work in progress
+ * The goal of this class is to aggregate all operations
+ * related to ToOne binding operations
+ *
+ * @author Emmanuel Bernard
+ */
+public class ToOneBinder {
+	public static String getReferenceEntityName(PropertyData propertyData, XClass targetEntity, ExtendedMappings mappings) {
+		if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
+			return propertyData.getClassOrElementName();
+		}
+		else {
+			return targetEntity.getName();
+		}
+	}
+
+	public static String getReferenceEntityName(PropertyData propertyData, ExtendedMappings mappings) {
+		XClass targetEntity = getTargetEntity( propertyData, mappings );
+		if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
+			return propertyData.getClassOrElementName();
+		}
+		else {
+			return targetEntity.getName();
+		}
+	}
+
+	public static XClass getTargetEntity(PropertyData propertyData, ExtendedMappings mappings) {
+		XProperty property = propertyData.getProperty();
+		return mappings.getReflectionManager().toXClass( getTargetEntityClass( property ) );
+	}
+
+	private static Class<?> getTargetEntityClass(XProperty property) {
+		final ManyToOne mTo = property.getAnnotation( ManyToOne.class );
+		if (mTo != null) {
+			return mTo.targetEntity();
+		}
+		final OneToOne oTo = property.getAnnotation( OneToOne.class );
+		if (oTo != null) {
+			return oTo.targetEntity();
+		}
+		throw new AssertionFailure("Unexpected discovery of a targetEntity: " + property.getName() );
+	}
+}

Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/SimpleValueBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/SimpleValueBinder.java	2010-01-20 15:35:26 UTC (rev 18588)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/SimpleValueBinder.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -27,6 +27,7 @@
 import java.sql.Types;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.Map;
 import java.util.Properties;
 import javax.persistence.Enumerated;
 import javax.persistence.Lob;
@@ -46,6 +47,7 @@
 import org.hibernate.cfg.Ejb3Column;
 import org.hibernate.cfg.ExtendedMappings;
 import org.hibernate.cfg.NotYetImplementedException;
+import org.hibernate.cfg.SecondPass;
 import org.hibernate.cfg.SetSimpleValueTypeSecondPass;
 import org.hibernate.mapping.SimpleValue;
 import org.hibernate.mapping.Table;
@@ -288,15 +290,13 @@
 			table = columns[0].getTable();
 		}
 		simpleValue = new SimpleValue( table );
-		
-		for (Ejb3Column column : columns) {
-			column.linkWithValue( simpleValue );
-		}
-		
+
+		linkWithValue();
+
 		boolean isInSecondPass = mappings.isInSecondPass();
+		SetSimpleValueTypeSecondPass secondPass = new SetSimpleValueTypeSecondPass(this);
 		if (!isInSecondPass) {
 			//Defer this to the second pass
-			SetSimpleValueTypeSecondPass secondPass = new SetSimpleValueTypeSecondPass(this);
 			mappings.addSecondPass(secondPass);
 		}
 		else {
@@ -306,6 +306,12 @@
 		return simpleValue;
 	}
 
+	public void linkWithValue() {
+		for ( Ejb3Column column : columns) {
+			column.linkWithValue( simpleValue );
+		}
+	}
+
 	public void fillSimpleValue() {
 				
 		log.debug( "setting SimpleValue typeName for {}", propertyName );

Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/TableBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/TableBinder.java	2010-01-20 15:35:26 UTC (rev 18588)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/annotations/TableBinder.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -314,7 +314,7 @@
 	) {
 		PersistentClass associatedClass;
 		if ( destinationEntity != null ) {
-			//overidden destination
+			//overridden destination
 			associatedClass = destinationEntity;
 		}
 		else {

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/Dependent.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/Dependent.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/Dependent.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -0,0 +1,21 @@
+package org.hibernate.test.annotations.derivedidentities.e1.b;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.MapsId;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Dependent {
+	@EmbeddedId
+	DependentId id;
+
+	// id attribute mapped by join column default
+	@MapsId("empPK") // maps empPK attribute of embedded id
+	@ManyToOne
+	Employee emp;
+
+}

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/DependentId.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/DependentId.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/DependentId.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -0,0 +1,13 @@
+package org.hibernate.test.annotations.derivedidentities.e1.b;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Embeddable
+public class DependentId implements Serializable {
+	String name;
+	long empPK;	// corresponds to PK type of Employee
+}

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/DerivedIdentitySimpleParentEmbeddedIdDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/DerivedIdentitySimpleParentEmbeddedIdDepTest.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/DerivedIdentitySimpleParentEmbeddedIdDepTest.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -0,0 +1,42 @@
+package org.hibernate.test.annotations.derivedidentities.e1.b;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.util.SchemaUtil;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DerivedIdentitySimpleParentEmbeddedIdDepTest extends TestCase {
+
+//	public void testIt() throws Exception {
+//		assertTrue( SchemaUtil.isColumnPresent( "Dependent", "empPK", getCfg() ) );
+//		assertTrue( ! SchemaUtil.isColumnPresent( "Dependent", "emp_empId", getCfg() ) );
+//		Employee e = new Employee();
+//		e.empId = 1;
+//		e.empName = "Emmanuel";
+//		Session s = openSession(  );
+//		s.getTransaction().begin();
+//		s.persist( e );
+//		Dependent d = new Dependent();
+//		d.emp = e;
+//		d.id = new DependentId();
+//		d.id.name = "Doggy";
+//		d.id.empPK = e.empId; //FIXME not needed when foreign is enabled
+//		s.persist( d );
+//		s.flush();
+//		s.clear();
+//		d = (Dependent) s.get( Dependent.class, d.id );
+//		assertEquals( d.id.empPK, d.emp.empId );
+//		s.getTransaction().rollback();
+//		s.close();
+//	}
+
+	@Override
+	protected Class<?>[] getMappings() {
+		return new Class<?>[] {
+				Dependent.class,
+				Employee.class
+		};
+	}
+}

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/Employee.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/Employee.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/b/Employee.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -0,0 +1,14 @@
+package org.hibernate.test.annotations.derivedidentities.e1.b;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Employee {
+	@Id
+	long empId;
+	String empName;
+}

Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/DerivedIdentitySimpleParentSimpleDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/DerivedIdentitySimpleParentSimpleDepTest.java	2010-01-20 15:35:26 UTC (rev 18588)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/DerivedIdentitySimpleParentSimpleDepTest.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -11,7 +11,7 @@
  */
 public class DerivedIdentitySimpleParentSimpleDepTest extends TestCase {
 
-	public void testIt() throws Exception {
+	public void testOneToOneExplicitJoinColumn() throws Exception {
 		assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK", getCfg() ) );
 		assertTrue( ! SchemaUtil.isColumnPresent( "MedicalHistory", "id", getCfg() ) );
 		Person e = new Person();
@@ -36,11 +36,37 @@
 		s.close();
 	}
 
+	public void testManyToOneExplicitJoinColumn() throws Exception {
+		assertTrue( SchemaUtil.isColumnPresent( "FinancialHistory", "FK", getCfg() ) );
+		assertTrue( ! SchemaUtil.isColumnPresent( "FinancialHistory", "id", getCfg() ) );
+		Person e = new Person();
+		e.ssn = "aaa";
+		Session s = openSession(  );
+		s.getTransaction().begin();
+		s.persist( e );
+		FinancialHistory d = new FinancialHistory();
+		d.patient = e;
+		d.id = "aaa"; //FIXME not needed when foreign is enabled
+		s.persist( d );
+		s.flush();
+		s.clear();
+		d = (FinancialHistory) s.get( FinancialHistory.class, d.id );
+		assertEquals( d.id, d.patient.ssn );
+		d.lastupdate = new Date();
+		s.flush();
+		s.clear();
+		d = (FinancialHistory) s.get( FinancialHistory.class, d.id );
+		assertNotNull( d.lastupdate );
+		s.getTransaction().rollback();
+		s.close();
+	}
+
 	@Override
 	protected Class<?>[] getMappings() {
 		return new Class<?>[] {
 				MedicalHistory.class,
-				Person.class
+				Person.class,
+				FinancialHistory.class
 		};
 	}
 }
\ No newline at end of file

Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/FinancialHistory.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/FinancialHistory.java	                        (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/FinancialHistory.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -0,0 +1,27 @@
+package org.hibernate.test.annotations.derivedidentities.e4.a;
+
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.MapsId;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class FinancialHistory {
+	@Id
+	String id; // overriding not allowed ... // default join column name is overridden @MapsId
+	@Temporal(TemporalType.DATE)
+	Date lastupdate;
+
+	@JoinColumn(name = "FK")
+	@MapsId
+	@ManyToOne
+	Person patient;
+
+}

Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/MedicalHistory.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/MedicalHistory.java	2010-01-20 15:35:26 UTC (rev 18588)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e4/a/MedicalHistory.java	2010-01-20 16:51:02 UTC (rev 18589)
@@ -4,6 +4,7 @@
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
 import javax.persistence.MapsId;
 import javax.persistence.OneToOne;
 import javax.persistence.Temporal;



More information about the hibernate-commits mailing list