[hibernate-commits] Hibernate SVN: r18748 - in core/trunk: core/src/main/java/org/hibernate/cfg and 2 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Tue Feb 9 14:54:40 EST 2010
Author: steve.ebersole at jboss.com
Date: 2010-02-09 14:54:39 -0500 (Tue, 09 Feb 2010)
New Revision: 18748
Added:
core/trunk/core/src/main/java/org/hibernate/id/IdentifierGeneratorAggregator.java
Modified:
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Multiple.java
core/trunk/core/src/main/java/org/hibernate/cfg/Configuration.java
core/trunk/core/src/main/java/org/hibernate/id/CompositeNestedGeneratedValueGenerator.java
core/trunk/core/src/main/java/org/hibernate/mapping/Component.java
Log:
HHH-4894 - Process composite-id sub-generators PersistentIdentifierGenerator contract(s)
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Multiple.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Multiple.java 2010-02-09 19:22:10 UTC (rev 18747)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/idclassgeneratedvalue/Multiple.java 2010-02-09 19:54:39 UTC (rev 18748)
@@ -27,8 +27,10 @@
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.IdClass;
+import javax.persistence.SequenceGenerator;
import org.hibernate.annotations.GenericGenerator;
@@ -48,8 +50,8 @@
private Long id1;
@Id
- @GenericGenerator(name = "increment2", strategy = "increment")
- @GeneratedValue(generator = "increment2")
+ @GeneratedValue(generator = "MULTIPLE_SEQ", strategy = GenerationType.SEQUENCE)
+ @SequenceGenerator( name = "MULTIPLE_SEQ", sequenceName = "MULTIPLE_SEQ")
private Long id2;
@Id
Modified: core/trunk/core/src/main/java/org/hibernate/cfg/Configuration.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/cfg/Configuration.java 2010-02-09 19:22:10 UTC (rev 18747)
+++ core/trunk/core/src/main/java/org/hibernate/cfg/Configuration.java 2010-02-09 19:54:39 UTC (rev 18748)
@@ -67,6 +67,7 @@
import org.hibernate.SessionFactory;
import org.hibernate.SessionFactoryObserver;
import org.hibernate.DuplicateMappingException;
+import org.hibernate.id.IdentifierGeneratorAggregator;
import org.hibernate.tuple.entity.EntityTuplizerFactory;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.MySQLDialect;
@@ -800,6 +801,9 @@
if ( ig instanceof PersistentIdentifierGenerator ) {
generators.put( ( (PersistentIdentifierGenerator) ig ).generatorKey(), ig );
}
+ else if ( ig instanceof IdentifierGeneratorAggregator ) {
+ ( (IdentifierGeneratorAggregator) ig ).registerPersistentGenerators( generators );
+ }
}
}
Modified: core/trunk/core/src/main/java/org/hibernate/id/CompositeNestedGeneratedValueGenerator.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/id/CompositeNestedGeneratedValueGenerator.java 2010-02-09 19:22:10 UTC (rev 18747)
+++ core/trunk/core/src/main/java/org/hibernate/id/CompositeNestedGeneratedValueGenerator.java 2010-02-09 19:54:39 UTC (rev 18748)
@@ -27,6 +27,7 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.engine.SessionImplementor;
@@ -61,7 +62,7 @@
*
* @author Steve Ebersole
*/
-public class CompositeNestedGeneratedValueGenerator implements IdentifierGenerator, Serializable {
+public class CompositeNestedGeneratedValueGenerator implements IdentifierGenerator, Serializable, IdentifierGeneratorAggregator {
/**
* Contract for declaring how to locate the context for sub-value injection.
*/
@@ -91,6 +92,14 @@
* @param injectionContext The context into which the generated value can be injected
*/
public void execute(SessionImplementor session, Object incomingObject, Object injectionContext);
+
+ /**
+ * Register any sub generators which implement {@link PersistentIdentifierGenerator} by their
+ * {@link PersistentIdentifierGenerator#generatorKey generatorKey}.
+ *
+ * @param generatorMap The map of generators.
+ */
+ public void registerPersistentGenerators(Map generatorMap);
}
private final GenerationContextLocator generationContextLocator;
@@ -116,4 +125,14 @@
return context;
}
+ /**
+ * {@inheritDoc}
+ */
+ public void registerPersistentGenerators(Map generatorMap) {
+ final Iterator itr = generationPlans.iterator();
+ while ( itr.hasNext() ) {
+ final GenerationPlan plan = (GenerationPlan) itr.next();
+ plan.registerPersistentGenerators( generatorMap );
+ }
+ }
}
Added: core/trunk/core/src/main/java/org/hibernate/id/IdentifierGeneratorAggregator.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/id/IdentifierGeneratorAggregator.java (rev 0)
+++ core/trunk/core/src/main/java/org/hibernate/id/IdentifierGeneratorAggregator.java 2010-02-09 19:54:39 UTC (rev 18748)
@@ -0,0 +1,44 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ */
+package org.hibernate.id;
+
+import java.util.Map;
+
+/**
+ * Identifies {@link IdentifierGenerator generators} which potentially aggregate other
+ * {@link PersistentIdentifierGenerator} generators.
+ * <p/>
+ * Initially this is limited to {@link CompositeNestedGeneratedValueGenerator}
+ *
+ * @author Steve Ebersole
+ */
+public interface IdentifierGeneratorAggregator {
+ /**
+ * Register any sub generators which implement {@link PersistentIdentifierGenerator} by their
+ * {@link PersistentIdentifierGenerator#generatorKey generatorKey}.
+ *
+ * @param generatorMap The map of generators.
+ */
+ public void registerPersistentGenerators(Map generatorMap);
+}
Modified: core/trunk/core/src/main/java/org/hibernate/mapping/Component.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/mapping/Component.java 2010-02-09 19:22:10 UTC (rev 18747)
+++ core/trunk/core/src/main/java/org/hibernate/mapping/Component.java 2010-02-09 19:54:39 UTC (rev 18748)
@@ -24,26 +24,19 @@
package org.hibernate.mapping;
import java.io.Serializable;
-import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import org.hibernate.EntityMode;
-import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.dialect.Dialect;
-import org.hibernate.engine.EntityEntry;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.CompositeNestedGeneratedValueGenerator;
import org.hibernate.id.IdentifierGenerator;
+import org.hibernate.id.PersistentIdentifierGenerator;
import org.hibernate.id.factory.IdentifierGeneratorFactory;
-import org.hibernate.property.Getter;
-import org.hibernate.property.PropertyAccessor;
import org.hibernate.property.Setter;
import org.hibernate.tuple.component.ComponentMetamodel;
import org.hibernate.type.ComponentType;
@@ -444,6 +437,12 @@
final Object generatedValue = subGenerator.generate( session, incomingObject );
injector.set( injectionContext, generatedValue, session.getFactory() );
}
+
+ public void registerPersistentGenerators(Map generatorMap) {
+ if ( PersistentIdentifierGenerator.class.isInstance( subGenerator ) ) {
+ generatorMap.put( ( (PersistentIdentifierGenerator) subGenerator ).generatorKey(), subGenerator );
+ }
+ }
}
}
More information about the hibernate-commits
mailing list