From: <hib...@li...> - 2006-07-28 06:55:01
|
Author: epbernard Date: 2006-07-25 17:37:08 -0400 (Tue, 25 Jul 2006) New Revision: 10150 Modified: trunk/Hibernate3/src/org/hibernate/engine/CascadingAction.java Log: HHH-1943 Modified: trunk/Hibernate3/src/org/hibernate/engine/CascadingAction.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/engine/CascadingAction.java 2006-07-25 17:08:43 UTC (rev 10149) +++ trunk/Hibernate3/src/org/hibernate/engine/CascadingAction.java 2006-07-25 21:37:08 UTC (rev 10150) @@ -267,7 +267,8 @@ Type type = persister.getPropertyTypes()[propertyIndex]; if ( type.isEntityType() ) { String childEntityName = ( ( EntityType ) type ).getAssociatedEntityName( session.getFactory() ); - if ( ForeignKeys.isTransient( childEntityName, child, null, session ) ) { + + if ( ! isInManagedState( child, session ) && ForeignKeys.isTransient( childEntityName, child, null, session ) ) { String parentEntiytName = persister.getEntityName(); String propertyName = persister.getPropertyNames()[propertyIndex]; throw new TransientObjectException( @@ -280,6 +281,11 @@ } } + private boolean isInManagedState(Object child, EventSource session) { + EntityEntry entry = session.getPersistenceContext().getEntry( child ); + return entry != null && (entry.getStatus() == Status.MANAGED || entry.getStatus() == Status.READ_ONLY); + } + public String toString() { return "ACTION_PERSIST_ON_FLUSH"; } |