mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-08 20:24:46 +00:00
add collection recreate/update/remove events to StatelessSession
This commit is contained in:
parent
a66bd7da0f
commit
22a13b535d
@ -36,6 +36,12 @@
|
||||
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
|
||||
import org.hibernate.event.monitor.spi.EventMonitor;
|
||||
import org.hibernate.event.monitor.spi.DiagnosticEvent;
|
||||
import org.hibernate.event.spi.PostCollectionRecreateEvent;
|
||||
import org.hibernate.event.spi.PostCollectionRecreateEventListener;
|
||||
import org.hibernate.event.spi.PostCollectionRemoveEvent;
|
||||
import org.hibernate.event.spi.PostCollectionRemoveEventListener;
|
||||
import org.hibernate.event.spi.PostCollectionUpdateEvent;
|
||||
import org.hibernate.event.spi.PostCollectionUpdateEventListener;
|
||||
import org.hibernate.event.spi.PostDeleteEvent;
|
||||
import org.hibernate.event.spi.PostDeleteEventListener;
|
||||
import org.hibernate.event.spi.PostInsertEvent;
|
||||
@ -44,6 +50,12 @@
|
||||
import org.hibernate.event.spi.PostUpdateEventListener;
|
||||
import org.hibernate.event.spi.PostUpsertEvent;
|
||||
import org.hibernate.event.spi.PostUpsertEventListener;
|
||||
import org.hibernate.event.spi.PreCollectionRecreateEvent;
|
||||
import org.hibernate.event.spi.PreCollectionRecreateEventListener;
|
||||
import org.hibernate.event.spi.PreCollectionRemoveEvent;
|
||||
import org.hibernate.event.spi.PreCollectionRemoveEventListener;
|
||||
import org.hibernate.event.spi.PreCollectionUpdateEvent;
|
||||
import org.hibernate.event.spi.PreCollectionUpdateEventListener;
|
||||
import org.hibernate.event.spi.PreDeleteEvent;
|
||||
import org.hibernate.event.spi.PreDeleteEventListener;
|
||||
import org.hibernate.event.spi.PreInsertEvent;
|
||||
@ -224,7 +236,7 @@ else if ( generator.generatedOnExecution( entity, this ) ) {
|
||||
}
|
||||
}
|
||||
recreateCollections( entity, id, persister );
|
||||
firePostInsert(entity, id, state, persister);
|
||||
firePostInsert( entity, id, state, persister );
|
||||
final StatisticsImplementor statistics = getFactory().getStatistics();
|
||||
if ( statistics.isStatisticsEnabled() ) {
|
||||
statistics.insertEntity( persister.getEntityName() );
|
||||
@ -235,6 +247,7 @@ else if ( generator.generatedOnExecution( entity, this ) ) {
|
||||
private void recreateCollections(Object entity, Object id, EntityPersister persister) {
|
||||
forEachOwnedCollection( entity, id, persister,
|
||||
(descriptor, collection) -> {
|
||||
firePreRecreate( collection, descriptor );
|
||||
final EventMonitor eventMonitor = getEventMonitor();
|
||||
final DiagnosticEvent event = eventMonitor.beginCollectionRecreateEvent();
|
||||
boolean success = false;
|
||||
@ -249,6 +262,7 @@ private void recreateCollections(Object entity, Object id, EntityPersister persi
|
||||
if ( statistics.isStatisticsEnabled() ) {
|
||||
statistics.recreateCollection( descriptor.getRole() );
|
||||
}
|
||||
firePostRecreate( collection, descriptor );
|
||||
} );
|
||||
}
|
||||
|
||||
@ -294,7 +308,7 @@ public void delete(String entityName, Object entity) {
|
||||
eventMonitor.completeEntityDeleteEvent( event, id, persister.getEntityName(), success, this );
|
||||
}
|
||||
removeCacheItem( ck, persister );
|
||||
firePostDelete(entity, id, persister);
|
||||
firePostDelete( entity, id, persister );
|
||||
final StatisticsImplementor statistics = getFactory().getStatistics();
|
||||
if ( statistics.isStatisticsEnabled() ) {
|
||||
statistics.deleteEntity( persister.getEntityName() );
|
||||
@ -305,6 +319,7 @@ public void delete(String entityName, Object entity) {
|
||||
private void removeCollections(Object entity, Object id, EntityPersister persister) {
|
||||
forEachOwnedCollection( entity, id, persister,
|
||||
(descriptor, collection) -> {
|
||||
firePreRemove( collection, entity, descriptor );
|
||||
final EventMonitor eventMonitor = getEventMonitor();
|
||||
final DiagnosticEvent event = eventMonitor.beginCollectionRemoveEvent();
|
||||
boolean success = false;
|
||||
@ -315,7 +330,7 @@ private void removeCollections(Object entity, Object id, EntityPersister persist
|
||||
finally {
|
||||
eventMonitor.completeCollectionRemoveEvent( event, id, descriptor.getRole(), success, this );
|
||||
}
|
||||
|
||||
firePostRemove( collection, entity, descriptor );
|
||||
final StatisticsImplementor statistics = getFactory().getStatistics();
|
||||
if ( statistics.isStatisticsEnabled() ) {
|
||||
statistics.removeCollection( descriptor.getRole() );
|
||||
@ -376,7 +391,7 @@ public void update(String entityName, Object entity) {
|
||||
}
|
||||
removeCacheItem( ck, persister );
|
||||
removeAndRecreateCollections( entity, id, persister );
|
||||
firePostUpdate(entity, id, state, persister);
|
||||
firePostUpdate( entity, id, state, persister );
|
||||
final StatisticsImplementor statistics = getFactory().getStatistics();
|
||||
if ( statistics.isStatisticsEnabled() ) {
|
||||
statistics.updateEntity( persister.getEntityName() );
|
||||
@ -387,6 +402,7 @@ public void update(String entityName, Object entity) {
|
||||
private void removeAndRecreateCollections(Object entity, Object id, EntityPersister persister) {
|
||||
forEachOwnedCollection( entity, id, persister,
|
||||
(descriptor, collection) -> {
|
||||
firePreUpdate( collection, descriptor );
|
||||
final EventMonitor eventMonitor = getEventMonitor();
|
||||
final DiagnosticEvent event = eventMonitor.beginCollectionRemoveEvent();
|
||||
boolean success = false;
|
||||
@ -399,6 +415,7 @@ private void removeAndRecreateCollections(Object entity, Object id, EntityPersis
|
||||
finally {
|
||||
eventMonitor.completeCollectionRemoveEvent( event, id, descriptor.getRole(), success, this );
|
||||
}
|
||||
firePostUpdate( collection, descriptor );
|
||||
final StatisticsImplementor statistics = getFactory().getStatistics();
|
||||
if ( statistics.isStatisticsEnabled() ) {
|
||||
statistics.updateCollection( descriptor.getRole() );
|
||||
@ -554,39 +571,63 @@ private boolean firePreDelete(Object entity, Object id, EntityPersister persiste
|
||||
}
|
||||
|
||||
private void firePostInsert(Object entity, Object id, Object[] state, EntityPersister persister) {
|
||||
if ( !fastSessionServices.eventListenerGroup_POST_INSERT.isEmpty() ) {
|
||||
final PostInsertEvent event = new PostInsertEvent( entity, id, state, persister, null );
|
||||
for ( PostInsertEventListener listener : fastSessionServices.eventListenerGroup_POST_INSERT.listeners() ) {
|
||||
listener.onPostInsert( event );
|
||||
}
|
||||
}
|
||||
fastSessionServices.eventListenerGroup_POST_INSERT.fireLazyEventOnEachListener(
|
||||
() -> new PostInsertEvent( entity, id, state, persister, null ),
|
||||
PostInsertEventListener::onPostInsert );
|
||||
}
|
||||
|
||||
private void firePostUpdate(Object entity, Object id, Object[] state, EntityPersister persister) {
|
||||
if ( !fastSessionServices.eventListenerGroup_POST_UPDATE.isEmpty() ) {
|
||||
final PostUpdateEvent event = new PostUpdateEvent( entity, id, state, null, null, persister, null );
|
||||
for ( PostUpdateEventListener listener : fastSessionServices.eventListenerGroup_POST_UPDATE.listeners() ) {
|
||||
listener.onPostUpdate( event );
|
||||
}
|
||||
}
|
||||
fastSessionServices.eventListenerGroup_POST_UPDATE.fireLazyEventOnEachListener(
|
||||
() -> new PostUpdateEvent( entity, id, state, null, null, persister, null ),
|
||||
PostUpdateEventListener::onPostUpdate );
|
||||
}
|
||||
|
||||
private void firePostUpsert(Object entity, Object id, Object[] state, EntityPersister persister) {
|
||||
if ( !fastSessionServices.eventListenerGroup_POST_UPSERT.isEmpty() ) {
|
||||
final PostUpsertEvent event = new PostUpsertEvent( entity, id, state, null, persister, null );
|
||||
for ( PostUpsertEventListener listener : fastSessionServices.eventListenerGroup_POST_UPSERT.listeners() ) {
|
||||
listener.onPostUpsert( event );
|
||||
}
|
||||
}
|
||||
fastSessionServices.eventListenerGroup_POST_UPSERT.fireLazyEventOnEachListener(
|
||||
() -> new PostUpsertEvent( entity, id, state, null, persister, null ),
|
||||
PostUpsertEventListener::onPostUpsert );
|
||||
}
|
||||
|
||||
private void firePostDelete(Object entity, Object id, EntityPersister persister) {
|
||||
if (!fastSessionServices.eventListenerGroup_POST_DELETE.isEmpty()) {
|
||||
final PostDeleteEvent event = new PostDeleteEvent( entity, id, null, persister, null );
|
||||
for ( PostDeleteEventListener listener : fastSessionServices.eventListenerGroup_POST_DELETE.listeners() ) {
|
||||
listener.onPostDelete( event );
|
||||
}
|
||||
}
|
||||
fastSessionServices.eventListenerGroup_POST_DELETE.fireLazyEventOnEachListener(
|
||||
() -> new PostDeleteEvent( entity, id, null, persister, null ),
|
||||
PostDeleteEventListener::onPostDelete );
|
||||
}
|
||||
|
||||
private void firePreRecreate(PersistentCollection<?> collection, CollectionPersister persister) {
|
||||
fastSessionServices.eventListenerGroup_PRE_COLLECTION_RECREATE.fireLazyEventOnEachListener(
|
||||
() -> new PreCollectionRecreateEvent( persister, collection, null ),
|
||||
PreCollectionRecreateEventListener::onPreRecreateCollection );
|
||||
}
|
||||
|
||||
private void firePreUpdate(PersistentCollection<?> collection, CollectionPersister persister) {
|
||||
fastSessionServices.eventListenerGroup_PRE_COLLECTION_UPDATE.fireLazyEventOnEachListener(
|
||||
() -> new PreCollectionUpdateEvent( persister, collection, null ),
|
||||
PreCollectionUpdateEventListener::onPreUpdateCollection );
|
||||
}
|
||||
|
||||
private void firePreRemove(PersistentCollection<?> collection, Object owner, CollectionPersister persister) {
|
||||
fastSessionServices.eventListenerGroup_PRE_COLLECTION_REMOVE.fireLazyEventOnEachListener(
|
||||
() -> new PreCollectionRemoveEvent( persister, collection, null, owner ),
|
||||
PreCollectionRemoveEventListener::onPreRemoveCollection );
|
||||
}
|
||||
|
||||
private void firePostRecreate(PersistentCollection<?> collection, CollectionPersister persister) {
|
||||
fastSessionServices.eventListenerGroup_POST_COLLECTION_RECREATE.fireLazyEventOnEachListener(
|
||||
() -> new PostCollectionRecreateEvent( persister, collection, null ),
|
||||
PostCollectionRecreateEventListener::onPostRecreateCollection );
|
||||
}
|
||||
|
||||
private void firePostUpdate(PersistentCollection<?> collection, CollectionPersister persister) {
|
||||
fastSessionServices.eventListenerGroup_POST_COLLECTION_UPDATE.fireLazyEventOnEachListener(
|
||||
() -> new PostCollectionUpdateEvent( persister, collection, null ),
|
||||
PostCollectionUpdateEventListener::onPostUpdateCollection );
|
||||
}
|
||||
|
||||
private void firePostRemove(PersistentCollection<?> collection, Object owner, CollectionPersister persister) {
|
||||
fastSessionServices.eventListenerGroup_POST_COLLECTION_REMOVE.fireLazyEventOnEachListener(
|
||||
() -> new PostCollectionRemoveEvent( persister, collection, null, owner ),
|
||||
PostCollectionRemoveEventListener::onPostRemoveCollection );
|
||||
}
|
||||
|
||||
// collections ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
Loading…
x
Reference in New Issue
Block a user