📄 sessionimpl.java
字号:
public void beforeTransactionCompletion(Transaction tx) { log.trace( "before transaction completion" ); if ( rootSession == null ) { try { interceptor.beforeTransactionCompletion(tx); } catch (Throwable t) { log.error("exception in interceptor beforeTransactionCompletion()", t); } } } public void setAutoClear(boolean enabled) { errorIfClosed(); autoClear = enabled; } /** * Check if there is a Hibernate or JTA transaction in progress and, * if there is not, flush if necessary, make sure the connection has * been committed (if it is not in autocommit mode) and run the after * completion processing */ public void afterOperation(boolean success) { if ( !jdbcContext.isTransactionInProgress() ) { jdbcContext.afterNontransactionalQuery( success ); } } public void afterTransactionCompletion(boolean success, Transaction tx) { log.trace( "after transaction completion" ); persistenceContext.afterTransactionCompletion(); actionQueue.afterTransactionCompletion(success); if ( rootSession == null && tx != null ) { try { interceptor.afterTransactionCompletion(tx); } catch (Throwable t) { log.error("exception in interceptor afterTransactionCompletion()", t); } } if ( autoClear ) { clear(); } } /** * clear all the internal collections, just * to help the garbage collector, does not * clear anything that is needed during the * afterTransactionCompletion() phase */ private void cleanup() { persistenceContext.clear(); } public LockMode getCurrentLockMode(Object object) throws HibernateException { errorIfClosed(); checkTransactionSynchStatus(); if ( object == null ) { throw new NullPointerException( "null object passed to getCurrentLockMode()" ); } if ( object instanceof HibernateProxy ) { object = ( (HibernateProxy) object ).getHibernateLazyInitializer().getImplementation(this); if ( object == null ) { return LockMode.NONE; } } EntityEntry e = persistenceContext.getEntry(object); if ( e == null ) { throw new TransientObjectException( "Given object not associated with the session" ); } if ( e.getStatus() != Status.MANAGED ) { throw new ObjectDeletedException( "The given object was deleted", e.getId(), e.getPersister().getEntityName() ); } return e.getLockMode(); } public Object getEntityUsingInterceptor(EntityKey key) throws HibernateException { errorIfClosed(); // todo : should this get moved to PersistentContext? // logically, is PersistentContext the "thing" to which an interceptor gets attached? final Object result = persistenceContext.getEntity(key); if ( result == null ) { final Object newObject = interceptor.getEntity( key.getEntityName(), key.getIdentifier() ); if ( newObject != null ) { lock( newObject, LockMode.NONE ); } return newObject; } else { return result; } } // saveOrUpdate() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void saveOrUpdate(Object object) throws HibernateException { saveOrUpdate(null, object); } public void saveOrUpdate(String entityName, Object obj) throws HibernateException { fireSaveOrUpdate( new SaveOrUpdateEvent(entityName, obj, this) ); } private void fireSaveOrUpdate(SaveOrUpdateEvent event) { errorIfClosed(); checkTransactionSynchStatus(); SaveOrUpdateEventListener[] saveOrUpdateEventListener = listeners.getSaveOrUpdateEventListeners(); for ( int i = 0; i < saveOrUpdateEventListener.length; i++ ) { saveOrUpdateEventListener[i].onSaveOrUpdate(event); } } // save() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void save(Object obj, Serializable id) throws HibernateException { save(null, obj, id); } public Serializable save(Object obj) throws HibernateException { return save(null, obj); } public Serializable save(String entityName, Object object) throws HibernateException { return fireSave( new SaveOrUpdateEvent(entityName, object, this) ); } public void save(String entityName, Object object, Serializable id) throws HibernateException { fireSave( new SaveOrUpdateEvent(entityName, object, id, this) ); } private Serializable fireSave(SaveOrUpdateEvent event) { errorIfClosed(); checkTransactionSynchStatus(); SaveOrUpdateEventListener[] saveEventListener = listeners.getSaveEventListeners(); for ( int i = 0; i < saveEventListener.length; i++ ) { saveEventListener[i].onSaveOrUpdate(event); } return event.getResultId(); } // update() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void update(Object obj) throws HibernateException { update(null, obj); } public void update(Object obj, Serializable id) throws HibernateException { update(null, obj, id); } public void update(String entityName, Object object) throws HibernateException { fireUpdate( new SaveOrUpdateEvent(entityName, object, this) ); } public void update(String entityName, Object object, Serializable id) throws HibernateException { fireUpdate(new SaveOrUpdateEvent(entityName, object, id, this)); } private void fireUpdate(SaveOrUpdateEvent event) { errorIfClosed(); checkTransactionSynchStatus(); SaveOrUpdateEventListener[] updateEventListener = listeners.getUpdateEventListeners(); for ( int i = 0; i < updateEventListener.length; i++ ) { updateEventListener[i].onSaveOrUpdate(event); } } // lock() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void lock(String entityName, Object object, LockMode lockMode) throws HibernateException { fireLock( new LockEvent(entityName, object, lockMode, this) ); } public void lock(Object object, LockMode lockMode) throws HibernateException { fireLock( new LockEvent(object, lockMode, this) ); } private void fireLock(LockEvent lockEvent) { errorIfClosed(); checkTransactionSynchStatus(); LockEventListener[] lockEventListener = listeners.getLockEventListeners(); for ( int i = 0; i < lockEventListener.length; i++ ) { lockEventListener[i].onLock( lockEvent ); } } // persist() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void persist(String entityName, Object object) throws HibernateException { firePersist( new PersistEvent(entityName, object, this) ); } public void persist(Object object) throws HibernateException { persist(null, object); } public void persist(String entityName, Object object, Map copiedAlready) throws HibernateException { firePersist( copiedAlready, new PersistEvent(entityName, object, this) ); } private void firePersist(Map copiedAlready, PersistEvent event) { errorIfClosed(); checkTransactionSynchStatus(); PersistEventListener[] persistEventListener = listeners.getPersistEventListeners(); for ( int i = 0; i < persistEventListener.length; i++ ) { persistEventListener[i].onPersist(event, copiedAlready); } } private void firePersist(PersistEvent event) { errorIfClosed(); checkTransactionSynchStatus(); PersistEventListener[] createEventListener = listeners.getPersistEventListeners(); for ( int i = 0; i < createEventListener.length; i++ ) { createEventListener[i].onPersist(event); } } // persistOnFlush() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void persistOnFlush(String entityName, Object object) throws HibernateException { firePersistOnFlush( new PersistEvent(entityName, object, this) ); } public void persistOnFlush(Object object) throws HibernateException { persist(null, object); } public void persistOnFlush(String entityName, Object object, Map copiedAlready) throws HibernateException { firePersistOnFlush( copiedAlready, new PersistEvent(entityName, object, this) ); } private void firePersistOnFlush(Map copiedAlready, PersistEvent event) { errorIfClosed(); checkTransactionSynchStatus(); PersistEventListener[] persistEventListener = listeners.getPersistOnFlushEventListeners(); for ( int i = 0; i < persistEventListener.length; i++ ) { persistEventListener[i].onPersist(event, copiedAlready); } } private void firePersistOnFlush(PersistEvent event) { errorIfClosed(); checkTransactionSynchStatus(); PersistEventListener[] createEventListener = listeners.getPersistOnFlushEventListeners(); for ( int i = 0; i < createEventListener.length; i++ ) { createEventListener[i].onPersist(event); } } // merge() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public Object merge(String entityName, Object object) throws HibernateException { return fireMerge( new MergeEvent(entityName, object, this) ); } public Object merge(Object object) throws HibernateException { return merge(null, object); } public void merge(String entityName, Object object, Map copiedAlready) throws HibernateException { fireMerge( copiedAlready, new MergeEvent(entityName, object, this) ); } private Object fireMerge(MergeEvent event) { errorIfClosed(); checkTransactionSynchStatus(); MergeEventListener[] mergeEventListener = listeners.getMergeEventListeners(); for ( int i = 0; i < mergeEventListener.length; i++ ) { mergeEventListener[i].onMerge(event); } return event.getResult(); } private void fireMerge(Map copiedAlready, MergeEvent event) { errorIfClosed(); checkTransactionSynchStatus(); MergeEventListener[] mergeEventListener = listeners.getMergeEventListeners(); for ( int i = 0; i < mergeEventListener.length; i++ ) { mergeEventListener[i].onMerge(event, copiedAlready); } } // saveOrUpdateCopy() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public Object saveOrUpdateCopy(String entityName, Object object) throws HibernateException { return fireSaveOrUpdateCopy( new MergeEvent(entityName, object, this) ); } public Object saveOrUpdateCopy(Object object) throws HibernateException { return saveOrUpdateCopy( null, object ); } public Object saveOrUpdateCopy(String entityName, Object object, Serializable id) throws HibernateException { return fireSaveOrUpdateCopy( new MergeEvent(entityName, object, id, this) ); } public Object saveOrUpdateCopy(Object object, Serializable id) throws HibernateException { return saveOrUpdateCopy( null, object, id ); } public void saveOrUpdateCopy(String entityName, Object object, Map copiedAlready) throws HibernateException { fireSaveOrUpdateCopy( copiedAlready, new MergeEvent( entityName, object, this ) ); } private void fireSaveOrUpdateCopy(Map copiedAlready, MergeEvent event) { errorIfClosed(); checkTransactionSynchStatus(); MergeEventListener[] saveOrUpdateCopyEventListener = listeners.getSaveOrUpdateCopyEventListeners(); for ( int i = 0; i < saveOrUpdateCopyEventListener.length; i++ ) { saveOrUpdateCopyEventListener[i].onMerge(event, copiedAlready); } } private Object fireSaveOrUpdateCopy(MergeEvent event) { errorIfClosed(); checkTransactionSynchStatus(); MergeEventListener[] saveOrUpdateCopyEventListener = listeners.getSaveOrUpdateCopyEventListeners(); for ( int i = 0; i < saveOrUpdateCopyEventListener.length; i++ ) { saveOrUpdateCopyEventListener[i].onMerge(event); } return event.getResult(); } // delete() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * Delete a persistent object */ public void delete(Object object) throws HibernateException { fireDelete( new DeleteEvent(object, this) ); } /** * Delete a persistent object (by explicit entity name) */ public void delete(String entityName, Object object) throws HibernateException { fireDelete( new DeleteEvent( entityName, object, this ) ); } /** * Delete a persistent object */ public void delete(String entityName, Object object, boolean isCascadeDeleteEnabled, Set transientEntities) throws HibernateException { fireDelete( new DeleteEvent( entityName, object, isCascadeDeleteEnabled, this ), transientEntities ); } private void fireDelete(DeleteEvent event) { errorIfClosed(); checkTransactionSynchStatus(); DeleteEventListener[] deleteEventListener = listeners.getDeleteEventListeners(); for ( int i = 0; i < deleteEventListener.length; i++ ) { deleteEventListener[i].onDelete( event ); } } private void fireDelete(DeleteEvent event, Set transientEntities) { errorIfClosed(); checkTransactionSynchStatus(); DeleteEventListener[] deleteEventListener = listeners.getDeleteEventListeners(); for ( int i = 0; i < deleteEventListener.length; i++ ) { deleteEventListener[i].onDelete( event, transientEntities ); } } // load()/get() operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public void load(Object object, Serializable id) throws HibernateException { LoadEvent event = new LoadEvent(id, object, this); fireLoad( event, LoadEventListener.RELOAD ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -