diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/InflightRuntimeMetamodel.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/InflightRuntimeMetamodel.java deleted file mode 100644 index 8ef9242fc8..0000000000 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/InflightRuntimeMetamodel.java +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html - */ -package org.hibernate.metamodel.internal; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArraySet; - -import org.hibernate.EntityNameResolver; -import org.hibernate.HibernateException; -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.cache.spi.CacheImplementor; -import org.hibernate.cache.spi.access.CollectionDataAccess; -import org.hibernate.cache.spi.access.EntityDataAccess; -import org.hibernate.cache.spi.access.NaturalIdDataAccess; -import org.hibernate.internal.EntityManagerMessageLogger; -import org.hibernate.internal.HEMLogging; -import org.hibernate.mapping.Collection; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.metamodel.model.domain.NavigableRole; -import org.hibernate.metamodel.spi.RuntimeModelCreationContext; -import org.hibernate.persister.collection.CollectionPersister; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.persister.spi.PersisterCreationContext; -import org.hibernate.persister.spi.PersisterFactory; -import org.hibernate.type.EntityType; -import org.hibernate.type.Type; -import org.hibernate.type.spi.TypeConfiguration; - -/** - * @author Steve Ebersole - */ -public class InflightRuntimeMetamodel { - private static final EntityManagerMessageLogger log = HEMLogging.messageLogger( InflightRuntimeMetamodel.class ); - - private final TypeConfiguration typeConfiguration; - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Hibernate metamodel - - private final Map entityPersisterMap = new ConcurrentHashMap<>(); - private final Map entityProxyInterfaceMap = new ConcurrentHashMap<>(); - private final Map collectionPersisterMap = new ConcurrentHashMap<>(); - private final Map> collectionRolesByEntityParticipant = new ConcurrentHashMap<>(); - - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Misc - - private final Map nameToImportNameMap = new HashMap<>(); - private final Set entityNameResolvers = new CopyOnWriteArraySet<>(); - private final Map imports = new ConcurrentHashMap<>( ); - - public InflightRuntimeMetamodel(TypeConfiguration typeConfiguration) { - this.typeConfiguration = typeConfiguration; - } - - public void processBootMetaModel( - MetadataImplementor bootMetamodel, - CacheImplementor cacheImplementor, - PersisterFactory persisterFactory, - RuntimeModelCreationContext modelCreationContext) { - this.imports.putAll( bootMetamodel.getImports() ); - processBootEntities( - bootMetamodel.getEntityBindings(), - cacheImplementor, - persisterFactory, - modelCreationContext - ); - - processBootCollections( - bootMetamodel.getCollectionBindings(), - cacheImplementor, - persisterFactory, - modelCreationContext - ); - - } - - public TypeConfiguration getTypeConfiguration() { - return typeConfiguration; - } - - public Map getEntityPersisterMap() { - return entityPersisterMap; - } - - public Map getEntityProxyInterfaceMap() { - return entityProxyInterfaceMap; - } - - public Map getCollectionPersisterMap() { - return collectionPersisterMap; - } - - public Map> getCollectionRolesByEntityParticipant() { - return collectionRolesByEntityParticipant; - } - - public Map getNameToImportNameMap() { - return nameToImportNameMap; - } - - public Set getEntityNameResolvers() { - return entityNameResolvers; - } - - /** - * Get an entity mapping descriptor based on its Hibernate entity-name - * - * @throws IllegalArgumentException if the name does not refer to an entity - */ - public EntityPersister getEntityDescriptor(String entityName) { - final EntityPersister entityPersister = entityPersisterMap.get( entityName ); - if ( entityPersister == null ) { - throw new IllegalArgumentException( "Unable to locate persister: " + entityName ); - } - return entityPersister; - } - - /** - * Find an entity mapping descriptor based on its Hibernate entity-name. - * - * @apiNote Returns {@code null} rather than throwing exception - */ - public EntityPersister findEntityDescriptor(String entityName) { - return entityPersisterMap.get( entityName ); - } - - private void processBootEntities( - java.util.Collection entityBindings, - CacheImplementor cacheImplementor, - PersisterFactory persisterFactory, - RuntimeModelCreationContext modelCreationContext) { - for ( final PersistentClass model : entityBindings ) { - final NavigableRole rootEntityRole = new NavigableRole( model.getRootClass().getEntityName() ); - final EntityDataAccess accessStrategy = cacheImplementor.getEntityRegionAccess( rootEntityRole ); - final NaturalIdDataAccess naturalIdAccessStrategy = cacheImplementor - .getNaturalIdCacheRegionAccessStrategy( rootEntityRole ); - - final EntityPersister cp = persisterFactory.createEntityPersister( - model, - accessStrategy, - naturalIdAccessStrategy, - modelCreationContext - ); - entityPersisterMap.put( model.getEntityName(), cp ); - - if ( cp.getConcreteProxyClass() != null - && cp.getConcreteProxyClass().isInterface() - && !Map.class.isAssignableFrom( cp.getConcreteProxyClass() ) - && cp.getMappedClass() != cp.getConcreteProxyClass() ) { - // IMPL NOTE : we exclude Map based proxy interfaces here because that should - // indicate MAP entity mode.0 - - if ( cp.getMappedClass().equals( cp.getConcreteProxyClass() ) ) { - // this part handles an odd case in the Hibernate test suite where we map an interface - // as the class and the proxy. I cannot think of a real life use case for that - // specific test, but.. - if ( log.isDebugEnabled() ) { - log.debugf( - "Entity [%s] mapped same interface [%s] as class and proxy", - cp.getEntityName(), - cp.getMappedClass() - ); - } - } - else { - final String old = entityProxyInterfaceMap.put( cp.getConcreteProxyClass(), cp.getEntityName() ); - if ( old != null ) { - throw new HibernateException( - String.format( - Locale.ENGLISH, - "Multiple entities [%s, %s] named the same interface [%s] as their proxy which is not supported", - old, - cp.getEntityName(), - cp.getConcreteProxyClass().getName() - ) - ); - } - } - } - } - } - - private void processBootCollections( - java.util.Collection collectionBindings, - CacheImplementor cacheImplementor, - PersisterFactory persisterFactory, - PersisterCreationContext persisterCreationContext) { - for ( final Collection model : collectionBindings ) { - final NavigableRole navigableRole = new NavigableRole( model.getRole() ); - - final CollectionDataAccess accessStrategy = cacheImplementor.getCollectionRegionAccess( - navigableRole ); - - final CollectionPersister persister = persisterFactory.createCollectionPersister( - model, - accessStrategy, - persisterCreationContext - ); - collectionPersisterMap.put( model.getRole(), persister ); - Type indexType = persister.getIndexType(); - if ( indexType != null && indexType.isEntityType() && !indexType.isAnyType() ) { - String entityName = ( (EntityType) indexType ).getAssociatedEntityName(); - Set roles = collectionRolesByEntityParticipant.get( entityName ); - if ( roles == null ) { - roles = new HashSet<>(); - collectionRolesByEntityParticipant.put( entityName, roles ); - } - roles.add( persister.getRole() ); - } - Type elementType = persister.getElementType(); - if ( elementType.isEntityType() && !elementType.isAnyType() ) { - String entityName = ( (EntityType) elementType ).getAssociatedEntityName(); - Set roles = collectionRolesByEntityParticipant.get( entityName ); - if ( roles == null ) { - roles = new HashSet<>(); - collectionRolesByEntityParticipant.put( entityName, roles ); - } - roles.add( persister.getRole() ); - } - } - } - - public Map getImports() { - return imports; - } -} diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/GeneratedValueResolver.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/GeneratedValueResolver.java deleted file mode 100644 index 876db04054..0000000000 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/GeneratedValueResolver.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html - */ -package org.hibernate.metamodel.mapping; - -import org.hibernate.Incubating; -import org.hibernate.engine.spi.SharedSessionContractImplementor; - -/** - * Generalized contract covering an attribute's generation handling - * - * @author Steve Ebersole - */ -@Incubating -public interface GeneratedValueResolver { -// static GeneratedValueResolver from( -// Generator generator, -// GenerationTiming requestedTiming, -// int dbSelectionPosition) { -// assert requestedTiming.isNotNever(); -// -// if ( generator == null || !generator.getGenerationTiming().includes( requestedTiming ) ) { -// return NoGeneratedValueResolver.INSTANCE; -// } -// else { -// return generator.generatedByDatabase() -// ? new InDatabaseGeneratedValueResolver( requestedTiming, dbSelectionPosition ) // in-db generation (column-default, function, etc) -// : new InMemoryGeneratedValueResolver( (BeforeExecutionGenerator) generator, requestedTiming ); -// } -// } - -// GenerationTiming getGenerationTiming(); - Object resolveGeneratedValue(Object[] row, Object entity, SharedSessionContractImplementor session, Object currentValue); -} diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/InDatabaseGeneratedValueResolver.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/InDatabaseGeneratedValueResolver.java deleted file mode 100644 index c6fc60298c..0000000000 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/InDatabaseGeneratedValueResolver.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html - */ -package org.hibernate.metamodel.mapping; - -import org.hibernate.Internal; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.generator.EventType; - -/** - * GeneratedValueResolver impl for in-db generation. It extracts the generated value - * from a array of the ResultSet values - * - * @author Steve Ebersole - */ -@Internal -public class InDatabaseGeneratedValueResolver implements GeneratedValueResolver { - private final EventType eventType; - private final int resultPosition; - - public InDatabaseGeneratedValueResolver(EventType eventType, int resultPosition) { - this.eventType = eventType; - this.resultPosition = resultPosition; - } - -// @Override -// public GenerationTiming getGenerationTiming() { -// return timing; -// } - - @Override - public Object resolveGeneratedValue(Object[] row, Object entity, SharedSessionContractImplementor session, Object currentValue) { - return row[resultPosition]; - } -} diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/InMemoryGeneratedValueResolver.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/InMemoryGeneratedValueResolver.java deleted file mode 100644 index c5429674f5..0000000000 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/InMemoryGeneratedValueResolver.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html - */ -package org.hibernate.metamodel.mapping; - -import org.hibernate.Internal; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.generator.EventType; -import org.hibernate.generator.BeforeExecutionGenerator; - -/** - * GeneratedValueResolver impl for in-memory generation - * - * @author Steve Ebersole - */ -@Internal -public class InMemoryGeneratedValueResolver implements GeneratedValueResolver { - private final EventType eventType; - private final BeforeExecutionGenerator generator; - - public InMemoryGeneratedValueResolver(BeforeExecutionGenerator generator, EventType eventType) { - this.generator = generator; - this.eventType = eventType; - } - -// @Override -// public GenerationTiming getGenerationTiming() { -// return generationTiming; -// } - - @Override - public Object resolveGeneratedValue(Object[] row, Object entity, SharedSessionContractImplementor session, Object currentValue) { - return generator.generate( session, entity, currentValue, eventType ); - } -} diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/MappingModelVisitor.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/MappingModelVisitor.java deleted file mode 100644 index 3f952b795e..0000000000 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/MappingModelVisitor.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html - */ -package org.hibernate.metamodel.mapping; - -/** - * @author Steve Ebersole - */ -public interface MappingModelVisitor { -} diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/MappingModelWalker.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/MappingModelWalker.java deleted file mode 100644 index e2acab71d8..0000000000 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/MappingModelWalker.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html - */ -package org.hibernate.metamodel.mapping; - -/** - * @author Steve Ebersole - */ -public class MappingModelWalker { -} diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/GeneratedValuesProcessor.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/GeneratedValuesProcessor.java index d31184b3a4..8c76111621 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/GeneratedValuesProcessor.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/GeneratedValuesProcessor.java @@ -21,22 +21,19 @@ import org.hibernate.loader.ast.internal.LoaderSelectBuilder; import org.hibernate.loader.ast.internal.NoCallbackExecutionContext; import org.hibernate.metamodel.mapping.AttributeMapping; import org.hibernate.metamodel.mapping.EntityMappingType; -import org.hibernate.metamodel.mapping.GeneratedValueResolver; -import org.hibernate.metamodel.mapping.InDatabaseGeneratedValueResolver; import org.hibernate.query.spi.QueryOptions; import org.hibernate.sql.ast.Clause; import org.hibernate.sql.ast.tree.expression.JdbcParameter; import org.hibernate.sql.ast.tree.select.SelectStatement; import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl; -import org.hibernate.sql.exec.spi.ExecutionContext; import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect; import org.hibernate.sql.exec.spi.JdbcParameterBindings; import static org.hibernate.sql.results.spi.ListResultsConsumer.UniqueSemantic.FILTER; /** - * Responsible for retrieving {@linkplain OnExecutionGenerator - * database-generated} attribute values after an {@code insert} statement is executed. + * Responsible for retrieving {@linkplain OnExecutionGenerator database-generated} + * attribute values after an {@code insert} or {@code update} statement is executed. *

* Note that this class has responsibility for regular attributes of the entity. The * primary key / id attribute is handled separately, being the responsibility of an @@ -49,7 +46,7 @@ import static org.hibernate.sql.results.spi.ListResultsConsumer.UniqueSemantic.F @Incubating public class GeneratedValuesProcessor { private final SelectStatement selectStatement; - private final List valueDescriptors = new ArrayList<>(); + private final List generatedValuesToSelect; private final List jdbcParameters = new ArrayList<>(); private final EntityMappingType entityDescriptor; @@ -62,7 +59,7 @@ public class GeneratedValuesProcessor { this.entityDescriptor = entityDescriptor; this.sessionFactory = sessionFactory; - final List generatedValuesToSelect = getGeneratedAttributes( entityDescriptor, timing ); + generatedValuesToSelect = getGeneratedAttributes( entityDescriptor, timing ); if ( generatedValuesToSelect.isEmpty() ) { selectStatement = null; } @@ -82,11 +79,11 @@ public class GeneratedValuesProcessor { } /** - * Find attributes generated by a {@link OnExecutionGenerator}, - * populate the list of {@link GeneratedValueDescriptor}s by side effect, and - * return a list of {@link AttributeMapping}s. + * Find attributes generated by an {@link OnExecutionGenerator}. + * + * @return a list of {@link AttributeMapping}s. */ - private List getGeneratedAttributes(EntityMappingType entityDescriptor, EventType timing) { + private static List getGeneratedAttributes(EntityMappingType entityDescriptor, EventType timing) { // todo (6.0): For now, we rely on the entity metamodel as composite attributes report // GenerationTiming.NEVER even if they have attributes that would need generation final Generator[] generators = entityDescriptor.getEntityPersister().getEntityMetamodel().getGenerators(); @@ -95,12 +92,7 @@ public class GeneratedValuesProcessor { final Generator generator = generators[ mapping.getStateArrayPosition() ]; if ( generator != null && generator.generatedOnExecute() - && generator.generatesSometimes() ) { - // this attribute is generated for the timing we are processing... - valueDescriptors.add( new GeneratedValueDescriptor( - new InDatabaseGeneratedValueResolver( timing, generatedValuesToSelect.size() ), - mapping - ) ); + && generator.getEventTypes().contains(timing) ) { generatedValuesToSelect.add( mapping ); } } ); @@ -114,7 +106,7 @@ public class GeneratedValuesProcessor { if ( selectStatement != null ) { final List results = executeSelect( id, session ); assert results.size() == 1; - setEntityAttributes( entity, state, session, results.get(0) ); + setEntityAttributes( entity, state, results.get(0) ); } } @@ -125,7 +117,7 @@ public class GeneratedValuesProcessor { .buildSelectTranslator( sessionFactory, selectStatement ) .translate( jdbcParamBindings, QueryOptions.NONE ); return session.getFactory().getJdbcServices().getJdbcSelectExecutor() - .list( jdbcSelect, jdbcParamBindings, createExecutionContext( session ), (row) -> row, FILTER ); + .list( jdbcSelect, jdbcParamBindings, new NoCallbackExecutionContext(session), (row) -> row, FILTER ); } private JdbcParameterBindings getJdbcParameterBindings(Object id, SharedSessionContractImplementor session) { @@ -141,35 +133,12 @@ public class GeneratedValuesProcessor { return jdbcParamBindings; } - private void setEntityAttributes( - Object entity, - Object[] state, - SharedSessionContractImplementor session, - Object[] selectionResults) { - for ( int i = 0; i < valueDescriptors.size(); i++ ) { - final GeneratedValueDescriptor descriptor = valueDescriptors.get( i ); - final Object generatedValue = - descriptor.resolver.resolveGeneratedValue( selectionResults, entity, session, state[i] ); - state[ descriptor.attribute.getStateArrayPosition() ] = generatedValue; - descriptor.attribute.getAttributeMetadata() - .getPropertyAccess() - .getSetter() - .set( entity, generatedValue ); + private void setEntityAttributes(Object entity, Object[] state, Object[] selectionResults) { + for ( int i = 0; i < generatedValuesToSelect.size(); i++ ) { + final AttributeMapping attribute = generatedValuesToSelect.get( i ); + final Object generatedValue = selectionResults[i]; + state[ attribute.getStateArrayPosition() ] = generatedValue; + attribute.getAttributeMetadata().getPropertyAccess().getSetter().set( entity, generatedValue ); } } - - private static ExecutionContext createExecutionContext(SharedSessionContractImplementor session) { - return new NoCallbackExecutionContext( session ); - } - - private static class GeneratedValueDescriptor { - public final GeneratedValueResolver resolver; - public final AttributeMapping attribute; - - public GeneratedValueDescriptor(GeneratedValueResolver resolver, AttributeMapping attribute) { - this.resolver = resolver; - this.attribute = attribute; - } - } - } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/NoGeneratedValueResolver.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/NoGeneratedValueResolver.java deleted file mode 100644 index 086a45a188..0000000000 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/NoGeneratedValueResolver.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html - */ -package org.hibernate.metamodel.mapping.internal; - -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.metamodel.UnsupportedMappingException; -import org.hibernate.metamodel.mapping.GeneratedValueResolver; - -/** - * @author Steve Ebersole - */ -public class NoGeneratedValueResolver implements GeneratedValueResolver { - /** - * Singleton access - */ - public static final NoGeneratedValueResolver INSTANCE = new NoGeneratedValueResolver(); - -// @Override -// public GenerationTiming getGenerationTiming() { -// return GenerationTiming.NEVER; -// } - - @Override - public Object resolveGeneratedValue(Object[] row, Object entity, SharedSessionContractImplementor session, Object currentValue) { - throw new UnsupportedMappingException( "NoGeneratedValueResolver does not support generated values" ); - } -} diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java index 6dcad0af84..71ad95c686 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java @@ -1943,7 +1943,7 @@ public abstract class AbstractEntityPersister throw new AssertionFailure( "cannot force version increment on non-versioned entity" ); } - if ( entityMetamodel.isVersionGeneratedByDatabase() ) { + if ( entityMetamodel.isVersionGeneratedOnExecute() ) { // the difficulty here is exactly what we update in order to // force the version to be incremented in the db... throw new HibernateException( "LockMode.FORCE is currently not supported for generated version properties" ); @@ -2737,7 +2737,7 @@ public abstract class AbstractEntityPersister private static final boolean[] SINGLE_TRUE = new boolean[] { true }; public final boolean checkVersion(final boolean[] includeProperty) { - return includeProperty[getVersionProperty()] || entityMetamodel.isVersionGeneratedByDatabase(); + return includeProperty[getVersionProperty()] || entityMetamodel.isVersionGeneratedOnExecute(); } @Override @@ -3945,8 +3945,8 @@ public abstract class AbstractEntityPersister @Override public boolean isVersionPropertyGenerated() { return isVersioned() - && ( getEntityMetamodel().isVersionGeneratedByDatabase() - || getEntityMetamodel().isVersionGeneratedInMemory() ); + && ( getEntityMetamodel().isVersionGeneratedOnExecute() + || getEntityMetamodel().isVersionGeneratedBeforeExecute() ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/persister/spi/HydratedCompoundValueHandler.java b/hibernate-core/src/main/java/org/hibernate/persister/spi/HydratedCompoundValueHandler.java deleted file mode 100644 index 313646b1be..0000000000 --- a/hibernate-core/src/main/java/org/hibernate/persister/spi/HydratedCompoundValueHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later. - * See the lgpl.txt file in the root directory or . - */ -package org.hibernate.persister.spi; - -/** - * Where to begin... :) - * - * This gets to the internal concept of 2-phase loading of entity data and how specifically it is done. Essentially - * for composite values, the process of hydration results in a tuple array comprising the composition "atomic" values. - * For example, a Name component's hydrated state might look like {@code ["Steve", "L", "Ebersole"]}. - * - * There are times when we need to be able to extract individual pieces out of the hydrated tuple array. For example, - * for an entity with a composite identifier part of which is an association (a key-many-to-one) we often need to - * attempt 2-phase processing on the association portion of the identifier's hydrated tuple array. - * - * This contract allows us access to portions of the hydrated tuple state. - * - * @author Steve Ebersole - */ -public interface HydratedCompoundValueHandler { - Object extract(Object hydratedState); - void inject(Object hydratedState, Object value); -} diff --git a/hibernate-core/src/main/java/org/hibernate/tuple/entity/EntityMetamodel.java b/hibernate-core/src/main/java/org/hibernate/tuple/entity/EntityMetamodel.java index 15c62927b5..6bae104e0f 100644 --- a/hibernate-core/src/main/java/org/hibernate/tuple/entity/EntityMetamodel.java +++ b/hibernate-core/src/main/java/org/hibernate/tuple/entity/EntityMetamodel.java @@ -689,12 +689,12 @@ public class EntityMetamodel implements Serializable { return false; } - public boolean isVersionGeneratedByDatabase() { + public boolean isVersionGeneratedOnExecute() { final Generator strategy = generators[ versionPropertyIndex ]; return strategy != null && strategy.generatesSometimes() && strategy.generatedOnExecute(); } - public boolean isVersionGeneratedInMemory() { + public boolean isVersionGeneratedBeforeExecute() { final Generator strategy = generators[ versionPropertyIndex ]; return strategy != null && strategy.generatesSometimes() && !strategy.generatedOnExecute(); }