Newer
Older
alarm / src / com / casic / core / hibernate / SpringSessionContext.java
zhout on 2 Mar 2022 1 KB first commit
 package com.casic.core.hibernate;

 import org.hibernate.FlushMode;
 import org.hibernate.HibernateException;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.context.spi.CurrentSessionContext;
 import org.springframework.orm.hibernate4.SessionHolder;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 
 public class SpringSessionContext
   implements CurrentSessionContext
 {
   private final SessionFactory sessionFactory;
 
   public SpringSessionContext(SessionFactory sessionFactory)
   {
     this.sessionFactory = sessionFactory;
   }
 
   public Session currentSession() throws HibernateException {
     Object value = TransactionSynchronizationManager.getResource(this.sessionFactory);
 
     if ((value instanceof Session))
       return (Session)value;
     if ((value instanceof SessionHolder)) {
       SessionHolder sessionHolder = (SessionHolder)value;
       Session session = sessionHolder.getSession();
 
       if ((TransactionSynchronizationManager.isSynchronizationActive()) && (!sessionHolder.isSynchronizedWithTransaction()))
       {
         TransactionSynchronizationManager.registerSynchronization(new SpringSessionSynchronization(sessionHolder, this.sessionFactory));
 
         sessionHolder.setSynchronizedWithTransaction(true);
 
         FlushMode flushMode = session.getFlushMode();
 
         if ((FlushMode.isManualFlushMode(flushMode)) && (!TransactionSynchronizationManager.isCurrentTransactionReadOnly()))
         {
           session.setFlushMode(FlushMode.AUTO);
           sessionHolder.setPreviousFlushMode(flushMode);
         }
       }
 
       return session;
     }
     throw new HibernateException("No Session found for current thread");
   }
 }