Skip to content

Commit 28c430e

Browse files
committed
HHH-19345 Relax JPA bootstrap entity state checks for remove
1 parent 139abfa commit 28c430e

File tree

2 files changed

+6
-12
lines changed

2 files changed

+6
-12
lines changed

hibernate-core/src/main/java/org/hibernate/event/internal/DefaultDeleteEventListener.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ private boolean optimizeUnloadedDelete(DeleteEvent event) {
103103
final PersistenceContext persistenceContext = source.getPersistenceContextInternal();
104104
if ( !persistenceContext.containsEntity( key )
105105
&& canBeDeletedWithoutLoading( source, persister ) ) {
106+
if ( event.getFactory().getSessionFactoryOptions().isJpaBootstrap() ) {
107+
throw new IllegalArgumentException( "Given entity is not associated with the persistence context" );
108+
}
106109
// optimization for deleting certain entities without loading them
107110
persistenceContext.reassociateProxy( object, id );
108111
if ( !persistenceContext.containsDeletedUnloadedEntityKey( key ) ) {
@@ -166,6 +169,9 @@ private void deleteUnmanagedInstance(DeleteEvent event, DeleteContext transientE
166169

167170
private void deleteDetachedEntity(
168171
DeleteEvent event, DeleteContext transientEntities, Object entity, EntityPersister persister, EventSource source) {
172+
if ( source.getFactory().getSessionFactoryOptions().isJpaBootstrap() ) {
173+
throw new IllegalArgumentException( "Given entity is not associated with the persistence context" );
174+
}
169175
final Object id = persister.getIdentifier( entity, source );
170176
if ( id == null ) {
171177
throw new TransientObjectException( "Cannot delete instance of entity '"

hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -927,7 +927,6 @@ private void logRemoveOrphanBeforeUpdates(String timing, String entityName, Obje
927927
}
928928

929929
private void fireDelete(final DeleteEvent event) {
930-
checkEntityManagedIfJpa( event.getEntityName(), event.getObject() );
931930
try {
932931
pulseTransactionCoordinator();
933932
eventListenerGroups.eventListenerGroup_DELETE
@@ -949,7 +948,6 @@ private void fireDelete(final DeleteEvent event) {
949948
}
950949

951950
private void fireDelete(final DeleteEvent event, final DeleteContext transientEntities) {
952-
checkEntityManagedIfJpa( event.getEntityName(), event.getObject() );
953951
try {
954952
pulseTransactionCoordinator();
955953
eventListenerGroups.eventListenerGroup_DELETE
@@ -1378,16 +1376,6 @@ private void checkEntityManaged(String entityName, Object entity) {
13781376
}
13791377
}
13801378

1381-
private void checkEntityManagedIfJpa(String entityName, Object entity) {
1382-
if ( getSessionFactoryOptions().isJpaBootstrap() ) {
1383-
if ( !managed( entityName, entity )
1384-
// just in case it was already deleted
1385-
&& !persistenceContext.isEntryFor( entity ) ) {
1386-
throw new IllegalArgumentException( "Given entity is not associated with the persistence context" );
1387-
}
1388-
}
1389-
}
1390-
13911379
private boolean managed(String entityName, Object entity) {
13921380
return entityName == null ? contains( entity ) : contains( entityName, entity );
13931381
}

0 commit comments

Comments
 (0)