|
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";
}
|