|
From: <hib...@li...> - 2006-03-29 08:57:37
|
Author: epbernard
Date: 2006-03-29 03:56:23 -0500 (Wed, 29 Mar 2006)
New Revision: 9710
Added:
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CreateKeySecondPass.java
Modified:
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java
Log:
ANN-292
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-03-29 03:32:24 UTC (rev 9709)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-03-29 08:56:23 UTC (rev 9710)
@@ -505,7 +505,7 @@
boolean onDeleteAppropriate = false;
if ( InheritanceType.JOINED.equals( inheritanceState.type ) && inheritanceState.hasParents ) {
onDeleteAppropriate = true;
- JoinedSubclass jsc = (JoinedSubclass) persistentClass;
+ final JoinedSubclass jsc = (JoinedSubclass) persistentClass;
if ( persistentClass.getEntityPersisterClass() == null ) {
persistentClass.getRootClass().setEntityPersisterClass( JoinedSubclassEntityPersister.class );
}
@@ -518,8 +518,7 @@
key.setCascadeDeleteEnabled( false );
}
TableBinder.bindFk( jsc.getSuperclass(), jsc, inheritanceJoinedColumns, key, false, mappings );
- jsc.createPrimaryKey();
- jsc.createForeignKey();
+ mappings.addSecondPass( new CreateKeySecondPass(jsc) );
}
else if ( InheritanceType.SINGLE_TABLE.equals( inheritanceState.type ) ) {
@@ -643,7 +642,7 @@
subclassAndSingleTableStrategy ? Nullability.FORCED_NULL : Nullability.NO_CONSTRAINT,
propertyAnnotatedElement.getProperty(),
propertyAnnotatedElement, classGenerators, entityBinder,
- false, false, entityBinder.getPropertyAccessor(), mappings
+ false, false, mappings
);
}
else {
@@ -664,7 +663,8 @@
}
if ( ! inheritanceState.hasParents ) {
- ( (RootClass) persistentClass ).createPrimaryKey();
+ final RootClass rootClass = (RootClass) persistentClass;
+ mappings.addSecondPass( new CreateKeySecondPass(rootClass) );
}
else {
superEntity.addSubclass( (Subclass) persistentClass );
@@ -925,7 +925,7 @@
PropertyHolder propertyHolder, Nullability nullability, XProperty property,
PropertyData inferredData, HashMap<String, IdGenerator> classGenerators,
EntityBinder entityBinder, boolean isIdentifierMapper,
- boolean isComponentEmbedded, String accessType, ExtendedMappings mappings
+ boolean isComponentEmbedded, ExtendedMappings mappings
)
throws MappingException {
Ejb3Column[] columns = null;
@@ -1479,7 +1479,7 @@
subHolder, isNullable ? Nullability.NO_CONSTRAINT : Nullability.FORCED_NOT_NULL,
propertyAnnotatedElement.getProperty(), propertyAnnotatedElement,
new HashMap<String, IdGenerator>(), entityBinder, isIdentifierMapper, isComponentEmbedded,
- propertyAccessor, mappings
+ mappings
);
}
return comp;
@@ -1512,9 +1512,10 @@
propertyHolder, inferredData, isPropertyAnnotated, propertyAccessor,
false, entityBinder, isEmbedded, isIdentifierMapper, mappings
);
- ( (Component) id ).setKey( true );
- if ( ! id.getColumnIterator().hasNext() ) {
- throw new AnnotationException( ( (Component) id ).getComponentClassName() + " has not persistent id property" );
+ Component componentId = (Component) id;
+ componentId.setKey( true );
+ if ( componentId.getPropertySpan() == 0 ) {
+ throw new AnnotationException( componentId.getComponentClassName() + " has no persistent id property" );
}
}
else {
@@ -1541,11 +1542,12 @@
PersistentIdentifierGenerator.TABLE, table.getName()
);
- Iterator idColumnIterator = id.getColumnIterator();
- params.setProperty(
- PersistentIdentifierGenerator.PK,
- ( (org.hibernate.mapping.Column) idColumnIterator.next() ).getName()
- );
+ if ( id.getColumnSpan() == 1) {
+ params.setProperty(
+ PersistentIdentifierGenerator.PK,
+ ( (org.hibernate.mapping.Column) id.getColumnIterator().next() ).getName()
+ );
+ }
if ( ! isDefault( generatorName ) ) {
//we have a named generator
IdGenerator gen = mappings.getGenerator( generatorName, localGenerators );
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-03-29 03:32:24 UTC (rev 9709)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-03-29 08:56:23 UTC (rev 9710)
@@ -240,6 +240,15 @@
iter.remove();
}
}
+ iter = secondPasses.iterator();
+ while ( iter.hasNext() ) {
+ SecondPass sp = (SecondPass) iter.next();
+ //do the second pass of fk before the others and remove them
+ if ( sp instanceof CreateKeySecondPass ) {
+ sp.doSecondPass( classes, Collections.EMPTY_MAP ); // TODO: align meta-attributes with normal bind...
+ iter.remove();
+ }
+ }
inSecondPass = true;
super.secondPassCompile();
inSecondPass = false;
Added: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CreateKeySecondPass.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CreateKeySecondPass.java 2006-03-29 03:32:24 UTC (rev 9709)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CreateKeySecondPass.java 2006-03-29 08:56:23 UTC (rev 9710)
@@ -0,0 +1,37 @@
+//$Id: $
+package org.hibernate.cfg;
+
+import java.util.Map;
+
+import org.hibernate.MappingException;
+import org.hibernate.mapping.RootClass;
+import org.hibernate.mapping.JoinedSubclass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class CreateKeySecondPass implements SecondPass {
+ private RootClass rootClass;
+ private JoinedSubclass joinedSubClass;
+
+ public CreateKeySecondPass(RootClass rootClass) {
+ this.rootClass = rootClass;
+ }
+
+ public CreateKeySecondPass(JoinedSubclass joinedSubClass) {
+ this.joinedSubClass = joinedSubClass;
+ }
+
+ public void doSecondPass(Map persistentClasses, Map inheritedMetas) throws MappingException {
+ if (rootClass != null) {
+ rootClass.createPrimaryKey();
+ }
+ else if (joinedSubClass != null) {
+ joinedSubClass.createPrimaryKey();
+ joinedSubClass.createForeignKey();
+ }
+ else {
+ throw new AssertionError( "rootClass and joinedSubClass are null" );
+ }
+ }
+}
Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java 2006-03-29 03:32:24 UTC (rev 9709)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/CompositeIdTest.java 2006-03-29 08:56:23 UTC (rev 9710)
@@ -71,15 +71,16 @@
TvMagazin mag = new TvMagazin();
mag.time = new Date();
mag.id = pk;
- pk.name = "Trax";
+ //pk.name = "Trax";
pk.channel = channel;
pk.presenter = pres;
s.persist( mag );
tx.commit();
s.clear();
tx = s.beginTransaction();
- mag = (TvMagazin) s.createQuery( "from TvMagazin mag where mag.id.name = :name")
- .setParameter( "name", "Trax" ).uniqueResult();
+ mag = (TvMagazin) s.createQuery( "from TvMagazin mag") // where mag.id.name = :name")
+ //.setParameter( "name", "Trax" )
+ .uniqueResult();
assertNotNull( mag.id );
assertNotNull( mag.id.channel );
assertEquals( channel.id, mag.id.channel.id );
Modified: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java 2006-03-29 03:32:24 UTC (rev 9709)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/cid/TvMagazinPk.java 2006-03-29 08:56:23 UTC (rev 9710)
@@ -12,7 +12,7 @@
public class TvMagazinPk implements Serializable {
@ManyToOne
public Channel channel;
- public String name;
+ //public String name;
@ManyToOne
public Presenter presenter;
}
|