[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