From: <hib...@li...> - 2006-07-27 19:27:58
|
Author: epbernard Date: 2006-07-25 17:47:00 -0400 (Tue, 25 Jul 2006) New Revision: 10151 Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/engine/CascadingAction.java Log: HHH-1943 Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/engine/CascadingAction.java =================================================================== --- branches/Branch_3_2/Hibernate3/src/org/hibernate/engine/CascadingAction.java 2006-07-25 21:37:08 UTC (rev 10150) +++ branches/Branch_3_2/Hibernate3/src/org/hibernate/engine/CascadingAction.java 2006-07-25 21:47:00 UTC (rev 10151) @@ -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"; } |