diff --git a/hibernate-core/src/main/java/org/hibernate/engine/spi/ActionQueue.java b/hibernate-core/src/main/java/org/hibernate/engine/spi/ActionQueue.java index 6fc3bfd1f5..ae65f8db94 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/spi/ActionQueue.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/spi/ActionQueue.java @@ -60,7 +60,7 @@ import org.hibernate.type.Type; * * The ActionQueue holds the DML operations queued as part of a session's transactional-write-behind semantics. The * DML operations are queued here until a flush forces them to be executed against the database. - * + * * @author Steve Ebersole * @author Gail Badner * @author Anton Marsden @@ -90,7 +90,7 @@ public class ActionQueue { private ExecutableList collectionUpdates; private ExecutableList collectionQueuedOps; private ExecutableList collectionRemovals; - + // TODO: The removeOrphan concept is a temporary "hack" for HHH-6484. This should be removed once action/task // ordering is improved. private ExecutableList orphanRemovals; @@ -220,7 +220,7 @@ public class ActionQueue { /** * Constructs an action queue bound to the given session. - * + * * @param session The session "owning" this queue. */ public ActionQueue(SessionImplementor session) { @@ -413,7 +413,7 @@ public class ActionQueue { /** * Are there unresolved entity insert actions that depend on non-nullable associations with a transient entity? - * + * * @return true, if there are unresolved entity insert actions that depend on non-nullable associations with a * transient entity; false, otherwise */ @@ -425,7 +425,7 @@ public class ActionQueue { * Throws {@link org.hibernate.PropertyValueException} if there are any unresolved entity insert actions that depend * on non-nullable associations with a transient entity. This method should be called on completion of an operation * (after all cascades are completed) that saves an entity. - * + * * @throws org.hibernate.PropertyValueException if there are any unresolved entity insert actions; * {@link org.hibernate.PropertyValueException#getEntityName()} and * {@link org.hibernate.PropertyValueException#getPropertyName()} will return the entity name and property value for @@ -453,7 +453,7 @@ public class ActionQueue { /** * Perform all currently queued entity-insertion actions. - * + * * @throws HibernateException error executing queued insertion actions. */ public void executeInserts() throws HibernateException { @@ -464,7 +464,7 @@ public class ActionQueue { /** * Perform all currently queued actions. - * + * * @throws HibernateException error executing queued actions. */ public void executeActions() throws HibernateException { @@ -482,7 +482,7 @@ public class ActionQueue { /** * Prepares the internal action queues for execution. - * + * * @throws HibernateException error preparing actions. */ public void prepareActions() throws HibernateException { @@ -503,7 +503,7 @@ public class ActionQueue { /** * Performs cleanup of any held cache softlocks. - * + * * @param success Was the transaction successful. */ public void afterTransactionCompletion(boolean success) { @@ -538,7 +538,7 @@ public class ActionQueue { /** * Check whether the given tables/query-spaces are to be executed against given the currently queued actions. - * + * * @param tables The table/query-spaces to check. * * @return {@code true} if we contain pending actions against any of the given tables; {@code false} otherwise. @@ -589,7 +589,7 @@ public class ActionQueue { /** * Perform {@link org.hibernate.action.spi.Executable#execute()} on each element of the list - * + * * @param list The list of Executable elements to be performed * * @throws HibernateException @@ -651,7 +651,7 @@ public class ActionQueue { /** * This method is now called once per execution of an ExecutableList or once for execution of an Execution. - * + * * @param spaces The spaces to invalidate */ private void invalidateSpaces(String... spaces) { @@ -669,7 +669,7 @@ public class ActionQueue { /** * Returns a string representation of the object. - * + * * @return a string representation of the object. */ @Override @@ -858,7 +858,7 @@ public class ActionQueue { /** * Used by the owning session to explicitly control serialization of the action queue - * + * * @param oos The stream to which the action queue should get written * @throws IOException Indicates an error writing to the stream */ @@ -883,7 +883,7 @@ public class ActionQueue { /** * Used by the owning session to explicitly control deserialization of the action queue. - * + * * @param ois The stream from which to read the action queue * @param session The session to which the action queue belongs * @return The deserialized action queue @@ -1025,7 +1025,7 @@ public class ActionQueue { * Sorts the insert actions using more hashes. *

* NOTE: this class is not thread-safe. - * + * * @author Jay Erb */ private static class InsertActionSorter implements ExecutableList.Sorter { @@ -1247,7 +1247,7 @@ public class ActionQueue { /** * Add parent and child entity names so that we know how to rearrange dependencies - * + * * @param action The action being sorted * @param batchIdentifier The batch identifier of the entity affected by the action */ @@ -1272,7 +1272,9 @@ public class ActionQueue { final String rootEntityName = action.getSession().getFactory().getMetamodel().entityPersister( entityName ).getRootEntityName(); if ( entityType.isOneToOne() && OneToOneType.class.cast( entityType ).getForeignKeyDirection() == ForeignKeyDirection.TO_PARENT ) { - batchIdentifier.getChildEntityNames().add( entityName ); + if ( !entityType.isReferenceToPrimaryKey() ) { + batchIdentifier.getChildEntityNames().add( entityName ); + } if ( !rootEntityName.equals( entityName ) ) { batchIdentifier.getChildEntityNames().add( rootEntityName ); }