发布时间:2025-12-09 12:05:00 浏览次数:1
import org.hibernate.engine.spi.PersistenceContext; //导入依赖的package包/类private static void processNeverReferencedCollection(PersistentCollection coll, SessionImplementor session)throws HibernateException {final PersistenceContext persistenceContext = session.getPersistenceContext();final CollectionEntry entry = persistenceContext.getCollectionEntry( coll );if ( LOG.isDebugEnabled() ) {LOG.debugf("Found collection with unloaded owner: %s",MessageHelper.collectionInfoString( entry.getLoadedPersister(),coll,entry.getLoadedKey(),session));}entry.setCurrentPersister( entry.getLoadedPersister() );entry.setCurrentKey( entry.getLoadedKey() );prepareCollectionForUpdate( coll, entry, session.getFactory() );} import org.hibernate.engine.spi.PersistenceContext; //导入依赖的package包/类/** * PostLoad cannot occur during initializeEntity, as that call occurs *before* * the Set collections are added to the persistence context by Loader. * Without the split, LazyInitializationExceptions can occur in the Entity's * postLoad if it acts upon the collection. * * HHH-6043 * * @param entity The entity * @param session The Session * @param postLoadEvent The (re-used) post-load event */public static void postLoad(final Object entity,final SessionImplementor session,final PostLoadEvent postLoadEvent) {if ( session.isEventSource() ) {final PersistenceContext persistenceContext= session.getPersistenceContext();final EntityEntry entityEntry = persistenceContext.getEntry( entity );postLoadEvent.setEntity( entity ).setId( entityEntry.getId() ).setPersister( entityEntry.getPersister() );final EventListenerGroup<PostLoadEventListener> listenerGroup = session.getFactory().getServiceRegistry().getService( EventListenerRegistry.class ).getEventListenerGroup( EventType.POST_LOAD );for ( PostLoadEventListener listener : listenerGroup.listeners() ) {listener.onPostLoad( postLoadEvent );}}} import org.hibernate.engine.spi.PersistenceContext; //导入依赖的package包/类/** * Given a proxy, initialize it and/or narrow it provided either * is necessary. * * @param event The initiating load request event * @param persister The persister corresponding to the entity to be loaded * @param keyToLoad The key of the entity to be loaded * @param options The defined load options * @param persistenceContext The originating session * @param proxy The proxy to narrow * * @return The created/existing proxy */private Object returnNarrowedProxy(final LoadEvent event,final EntityPersister persister,final EntityKey keyToLoad,final LoadEventListener.LoadType options,final PersistenceContext persistenceContext,final Object proxy) {LOG.trace( "Entity proxy found in session cache" );LazyInitializer li = ( (HibernateProxy) proxy ).getHibernateLazyInitializer();if ( li.isUnwrap() ) {return li.getImplementation();}Object impl = null;if ( !options.isAllowProxyCreation() ) {impl = load( event, persister, keyToLoad, options );if ( impl == null ) {event.getSession().getFactory().getEntityNotFoundDelegate().handleEntityNotFound( persister.getEntityName(), keyToLoad.getIdentifier() );}}return persistenceContext.narrowProxy( proxy, persister, keyToLoad, impl );} import org.hibernate.engine.spi.PersistenceContext; //导入依赖的package包/类@SuppressWarnings( value = {"unchecked"} )private void logFlushResults(FlushEvent event) {if ( !LOG.isDebugEnabled() ) {return;}final EventSource session = event.getSession();final PersistenceContext persistenceContext = session.getPersistenceContext();LOG.debugf("Flushed: %s insertions, %s updates, %s deletions to %s objects",session.getActionQueue().numberOfInsertions(),session.getActionQueue().numberOfUpdates(),session.getActionQueue().numberOfDeletions(),persistenceContext.getNumberOfManagedEntities());LOG.debugf("Flushed: %s (re)creations, %s updates, %s removals to %s collections",session.getActionQueue().numberOfCollectionCreations(),session.getActionQueue().numberOfCollectionUpdates(),session.getActionQueue().numberOfCollectionRemovals(),persistenceContext.getCollectionEntries().size());new EntityPrinter( session.getFactory() ).toString(persistenceContext.getEntitiesByKey().entrySet());} import org.hibernate.engine.spi.PersistenceContext; //导入依赖的package包/类/** * process cascade save/update at the start of a flush to discover * any newly referenced entity that must be passed to saveOrUpdate(), * and also apply orphan delete */private void prepareEntityFlushes(EventSource session, PersistenceContext persistenceContext) throws HibernateException {LOG.debug( "Processing flush-time cascades" );final Object anything = getAnything();//safe from concurrent modification because of how concurrentEntries() is implemented on IdentityMapfor ( Map.Entry<Object,EntityEntry> me : persistenceContext.reentrantSafeEntityEntries() ) {//for ( Map.Entry me : IdentityMap.concurrentEntries( persistenceContext.getEntityEntries() ) ) {EntityEntry entry = (EntityEntry) me.getValue();Status status = entry.getStatus();if ( status == Status.MANAGED || status == Status.SAVING || status == Status.READ_ONLY ) {cascadeOnFlush( session, entry.getPersister(), me.getKey(), anything );}}}