Created
October 7, 2012 12:19
-
-
Save bhdrkn/3848213 to your computer and use it in GitHub Desktop.
rest-db BaseHibernateDAO
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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