Skip to content

Commit 4ec1b91

Browse files
marko-bekhtayrodiere
authored andcommitted
HHH-19716 Set the collection owner when wrapping a collection into a persistent one
1 parent 9bcf5f2 commit 4ec1b91

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ protected void firePostRemove(PersistentCollection<?> collection, Object id, Str
680680

681681
// collections ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
682682

683-
// Hibernate Reactive overrides this
683+
// Hibernate Reactive calls this
684684
protected void forEachOwnedCollection(
685685
Object entity, Object key,
686686
EntityPersister persister, BiConsumer<CollectionPersister, PersistentCollection<?>> action) {
@@ -701,7 +701,7 @@ protected void forEachOwnedCollection(
701701
collection =
702702
value == null
703703
? instantiateEmpty( key, descriptor )
704-
: wrap( descriptor, value );
704+
: wrap( descriptor, value, entity );
705705
}
706706
action.accept( descriptor, collection );
707707
}
@@ -715,12 +715,12 @@ protected PersistentCollection<?> instantiateEmpty(Object key, CollectionPersist
715715
return descriptor.getCollectionSemantics().instantiateWrapper(key, descriptor, this);
716716
}
717717

718-
//TODO: is this the right way to do this?
719-
// Hibernate Reactive calls this
720718
@SuppressWarnings({"rawtypes", "unchecked"})
721-
protected PersistentCollection<?> wrap(CollectionPersister descriptor, Object collection) {
719+
protected PersistentCollection<?> wrap(CollectionPersister descriptor, Object collection, Object owner) {
722720
final CollectionSemantics collectionSemantics = descriptor.getCollectionSemantics();
723-
return collectionSemantics.wrap(collection, descriptor, this);
721+
var wrapped = collectionSemantics.wrap( collection, descriptor, this );
722+
wrapped.setOwner( owner );
723+
return wrapped;
724724
}
725725

726726
// loading ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

hibernate-core/src/test/java/org/hibernate/orm/test/stateless/events/CollectionListenerInStatelessSessionTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.hibernate.testing.orm.junit.SessionFactoryScope;
1919
import org.junit.jupiter.api.Test;
2020

21+
import static org.assertj.core.api.Assertions.assertThat;
2122
import static org.junit.jupiter.api.Assertions.assertEquals;
2223

2324
@DomainModel(annotatedClasses = {EntityA.class, EntityB.class})
@@ -64,6 +65,8 @@ class MyPreCollectionRecreateEventListener implements PreCollectionRecreateEvent
6465

6566
@Override
6667
public void onPreRecreateCollection(PreCollectionRecreateEvent event) {
68+
assertThat( event.getAffectedOwnerOrNull() ).isNotNull();
69+
assertThat( event.getCollection().getOwner() ).isNotNull();
6770
called++;
6871
}
6972

@@ -75,6 +78,8 @@ class MyPreCollectionRemoveEventListener implements PreCollectionRemoveEventList
7578

7679
@Override
7780
public void onPreRemoveCollection(PreCollectionRemoveEvent event) {
81+
assertThat( event.getAffectedOwnerOrNull() ).isNotNull();
82+
assertThat( event.getCollection().getOwner() ).isNotNull();
7883
called++;
7984
}
8085

@@ -86,6 +91,8 @@ class MyPostCollectionRecreateEventListener implements PostCollectionRecreateEve
8691

8792
@Override
8893
public void onPostRecreateCollection(PostCollectionRecreateEvent event) {
94+
assertThat( event.getAffectedOwnerOrNull() ).isNotNull();
95+
assertThat( event.getCollection().getOwner() ).isNotNull();
8996
called++;
9097
}
9198

@@ -97,6 +104,8 @@ class MyPostCollectionRemoveEventListener implements PostCollectionRemoveEventLi
97104

98105
@Override
99106
public void onPostRemoveCollection(PostCollectionRemoveEvent event) {
107+
assertThat( event.getAffectedOwnerOrNull() ).isNotNull();
108+
assertThat( event.getCollection().getOwner() ).isNotNull();
100109
called++;
101110
}
102111

0 commit comments

Comments
 (0)