Skip to content

Instantly share code, notes, and snippets.

@bhdrkn
Created October 7, 2012 12:19
Show Gist options
  • Save bhdrkn/3848213 to your computer and use it in GitHub Desktop.
Save bhdrkn/3848213 to your computer and use it in GitHub Desktop.
rest-db BaseHibernateDAO
package com.bahadirakin.dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.bahadirakin.util.HibernateUtil;
import com.bahadirakin.dao.IBaseDAO;
import com.bahadirakin.model.IEntity;
@SuppressWarnings("unchecked")
public abstract class BaseHibernateDAO<T extends IEntity> implements
IBaseDAO<T> {
private static final long serialVersionUID = 1L;
private static final Logger LOG = LoggerFactory
.getLogger(BaseHibernateDAO.class);
private HibernateUtil hibernateUtil;
private Class<T> persistentClass;
public BaseHibernateDAO() {
super();
hibernateUtil = HibernateUtil.getInstance();
this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
protected Session getCurrentSession() {
return hibernateUtil.getCurrentSession();
}
public Class<T> getPersistentClass() {
return persistentClass;
}
public Serializable save(T entity) {
Serializable serializable = null;
if (entity == null) {
throw new IllegalArgumentException("Entity must not be null");
}
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
serializable = session.save(entity);
transaction.commit();
} catch (HibernateException e) {
LOG.error("Error while saving Entity. M: " + e.getMessage()
+ " C: " + e.getCause(), e);
}
return serializable;
}
public void saveOrUpdate(T entity) {
if (entity == null) {
throw new IllegalArgumentException("Entity must not be null");
}
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
session.saveOrUpdate(entity);
transaction.commit();
} catch (HibernateException e) {
LOG.error("Error while saveOrUpdate Entity. M: " + e.getMessage()
+ " C: " + e.getCause(), e);
}
}
public void delete(T entity) {
if (entity == null) {
throw new IllegalArgumentException("Entity Must not be Null");
}
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
session.delete(entity);
transaction.commit();
} catch (HibernateException e) {
LOG.error("Error while delete Entity. M: " + e.getMessage()
+ " C: " + e.getCause(), e);
}
}
public void detach(T entity) {
if (entity == null) {
throw new IllegalArgumentException("Entity Must not be null");
}
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
session.evict(entity);
transaction.commit();
} catch (Exception e) {
LOG.error("Error while detach Entity. M: " + e.getMessage()
+ " C: " + e.getCause(), e);
}
}
public void refresh(T entity) {
if (entity == null) {
throw new IllegalArgumentException("Entity Must not be null");
}
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
session.refresh(entity);
transaction.commit();
} catch (Exception e) {
LOG.error("Error while refresh Entity. M: " + e.getMessage()
+ " C: " + e.getCause(), e);
}
}
public T getById(Integer id) {
T entity = null;
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
entity = (T) session.get(getPersistentClass(), id);
transaction.commit();
} catch (Exception e) {
LOG.error("Error while getById Entity. M: " + e.getMessage()
+ " C: " + e.getCause(), e);
}
return entity;
}
public List<T> getAll() {
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
List<T> list = session.createCriteria(getPersistentClass()).list();
transaction.commit();
return list;
} catch (Exception e) {
LOG.error("Error while getAll Entities. M: " + e.getMessage()
+ " C: " + e.getCause(), e);
}
return null;
}
public T getBySql(String query) {
T entity = null;
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
entity = (T) session.createSQLQuery(query)
.addEntity(getPersistentClass()).uniqueResult();
transaction.commit();
} catch (Exception e) {
LOG.error("Error while getWithSql Entity. M: " + e.getMessage()
+ " C: " + e.getCause() + " SQL: " + query, e);
}
return entity;
}
public List<T> getAllBySql(String query) {
List<T> ts = null;
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
ts = session.createSQLQuery(query).addEntity(getPersistentClass())
.list();
transaction.commit();
} catch (Exception e) {
LOG.error(
"Error while getAllWithSql Entities. M: " + e.getMessage()
+ " C: " + e.getCause() + " SQL: " + query, e);
}
return ts;
}
public void executeSQLQuery(String query) {
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
session.createSQLQuery(query).addEntity(getPersistentClass())
.executeUpdate();
transaction.commit();
} catch (Exception e) {
LOG.error(
"Error while executeSQLQuery Entities. M: "
+ e.getMessage() + " C: " + e.getCause() + " SQL: "
+ query, e);
}
}
protected List<T> findAllByCriteria(Criterion... criterions) {
return findAllByCriteriaAndOrder(null, criterions);
}
protected List<T> findAllByCriteriaAndOrder(Order order,
Criterion... criterions) {
List<T> ts = null;
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
Criteria criteria = createCriteria(session, criterions);
if (order != null) {
criteria.addOrder(order);
}
ts = criteria.list();
transaction.commit();
} catch (Exception e) {
LOG.error(
"Error while findAllByCriteria Entities and Order them. M: "
+ e.getMessage() + " C: " + e.getCause(), e);
}
return ts;
}
protected T findByCriteria(Criterion... criterions) {
T t = null;
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
Criteria criteria = createCriteria(session, criterions);
t = (T) criteria.uniqueResult();
transaction.commit();
} catch (Exception e) {
LOG.error("Error while findByCriteria Entiry. M: " + e.getMessage()
+ " C: " + e.getCause(), e);
}
return t;
}
protected Object findByProjection(Projection projection,
Criterion... criterions) {
Object result = null;
try {
Session session = this.getCurrentSession();
Transaction transaction = session.beginTransaction();
Criteria criteria = createCriteria(session, criterions);
criteria.setProjection(projection);
result = criteria.uniqueResult();
transaction.commit();
} catch (Exception e) {
LOG.error(
"Error while findByCriteria Entities. M: " + e.getMessage()
+ " C: " + e.getCause(), e);
}
return result;
}
protected Criteria createCriteria(Session session, Criterion... criterions) {
Criteria criteria = session.createCriteria(getPersistentClass());
for (Criterion criterion : criterions) {
criteria.add(criterion);
}
return criteria;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment