Package org.hivedb.hibernate.simplified

Source Code of org.hivedb.hibernate.simplified.HibernateTransactionHelper

package org.hivedb.hibernate.simplified;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hivedb.hibernate.QueryCallback;
import org.hivedb.hibernate.RecordNodeOpenSessionEvent;
import org.hivedb.hibernate.SessionCallback;
import org.hivedb.util.Lists;
import org.hivedb.util.functional.Atom;

import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;

public class HibernateTransactionHelper {
  private final static Log log = LogFactory.getLog(HibernateTransactionHelper.class);

  public Object querySingleInTransaction(QueryCallback callback, Session session) {
      Collection<Object> results = Lists.newArrayList();
      try {
        session.setFlushMode(FlushMode.MANUAL);
        Transaction tx = session.beginTransaction();
        results = callback.execute(session);
        tx.commit();
      } catch( RuntimeException e ) {
        log.debug("queryInTransaction: Error on data node " + RecordNodeOpenSessionEvent.getNode(), e);
        throw e;
      } finally {
        session.close();
      }
      return Atom.getFirstOrNull(results);
    }


  public Collection<Object> queryInTransaction(QueryCallback callback, Session session) {
    Collection<Object> results = Lists.newArrayList();
    try {
      session.setFlushMode(FlushMode.MANUAL);
      Transaction tx = session.beginTransaction();
      results = callback.execute(session);
      tx.commit();
    } catch( RuntimeException e ) {
      log.debug("queryInTransaction: Error on data node " + RecordNodeOpenSessionEvent.getNode(), e);
      throw e;
    } finally {
      session.close();
    }
    return results;
  }

  public void updateInTransaction(SessionCallback callback, Session session) {
    Transaction tx = null;
    try {
      tx = session.beginTransaction();
      callback.execute(session);
      tx.commit();
    } catch( RuntimeException e ) {
      log.debug("doInTransaction: Error on data node " + RecordNodeOpenSessionEvent.getNode(), e);
      if(tx != null)
        tx.rollback();
      throw e;
    } finally {
      session.close();
    }
  }

  public<ID extends Serializable> QueryCallback newGetCallback(final ID id, final Class<?> clazz) {
    return new QueryCallback() {
      public Collection<Object> execute(Session session) {
        return Collections.singletonList(session.get(clazz, id));
      }
    };
  }

  public<T> SessionCallback newSaveCallback(final T entity, final Class<T> clazz) {
    return new SessionCallback() {
      public void execute(Session session) {
        session.saveOrUpdate(clazz.getName(), entity);
      }
    };
  }
}

TOP

Related Classes of org.hivedb.hibernate.simplified.HibernateTransactionHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.