package org.bygle.db.dao;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository("dbManager")
@Transactional
public class DBManager implements DBManagerInterface{
private HibernateTemplate hibernateTemplate;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
hibernateTemplate = new HibernateTemplate(sessionFactory);
}
public List<?> getList(final Class<?> genericClass) throws HibernateException {
try {
return hibernateTemplate.find("from "+ genericClass.getName());
} catch (HibernateException e) {
throw e;
}
}
public List<?> getPagedList(final Class<?> genericClass,final int start,final int lenght) throws HibernateException {
try {
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(genericClass);
return hibernateTemplate.findByCriteria(detachedCriteria, start, lenght);
} catch (HibernateException e) {
throw e;
}
}
public List<?> getList(final DetachedCriteria criteria) throws HibernateException{
try{
return hibernateTemplate.findByCriteria(criteria);
} catch (HibernateException e) {
throw e;
}
}
public Session getSession() throws HibernateException{
try{
Session session = null;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
}
return session;
} catch (HibernateException e) {
throw e;
}
}
public List<?> getPagedList(final DetachedCriteria criteria,final int start,final int lenght) throws HibernateException{
try{
return hibernateTemplate.findByCriteria(criteria, start, lenght);
} catch (HibernateException e) {
throw e;
}
}
public Object getObject(final Class<?> genericClass,final Object id) throws HibernateException {
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
Object result = session.get(genericClass, (Serializable)id);
if(close)
session.close();
return result;
} catch (HibernateException e) {
throw e;
}
}
@Transactional(readOnly = false)
public void update(final Object genericObj)throws HibernateException {
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
session.merge(genericObj);
if(close)
session.close();
} catch (HibernateException e) {
throw e;
}
}
@Transactional(readOnly = false)
public void add(final Object genericObj)throws HibernateException {
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
session.saveOrUpdate(genericObj);
if(close)
session.close();
} catch (HibernateException e) {
throw e;
}
}
@Transactional(readOnly = false)
public void remove(final Object genericObj)throws HibernateException {
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
session.delete(genericObj);
if(close)
session.close();
} catch (HibernateException e) {
throw e;
}
}
@Transactional(readOnly = false)
public void addAll(final Set<?> genericObjects)throws HibernateException {
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
for (Iterator<?> it = genericObjects.iterator(); it.hasNext();) {
session.saveOrUpdate(it.next());
}
if(close)
session.close();
} catch (HibernateException e) {
throw e;
}
}
@Transactional(readOnly = false)
public void removeAll(final Set<?> genericObjects)throws HibernateException {
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
for (Iterator<?> it = genericObjects.iterator(); it.hasNext();) {
session.delete(it.next());
}
if(close)
session.close();
} catch (HibernateException e) {
throw e;
}
}
@Transactional(readOnly = false)
public void removeAll(final List<?> genericObjects)throws HibernateException {
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
for (Iterator<?> it = genericObjects.iterator(); it.hasNext();) {
session.delete(it.next());
}
if(close)
session.close();
} catch (HibernateException e) {
throw e;
}
}
@Transactional(readOnly = false)
public void updateAll(final Set<?> genericObjects)throws HibernateException {
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
for (Iterator<?> it = genericObjects.iterator(); it.hasNext();) {
session.saveOrUpdate(it.next());
}
if(close)
session.close();
} catch (HibernateException e) {
throw e;
}
}
public List<?> getListFromSQL(final Class<?> genericClass,final String query) throws HibernateException{
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
SQLQuery sQLQuery= session.createSQLQuery(query);
sQLQuery.addEntity(genericClass);
List<?> result = sQLQuery.list();
if(close)
session.close();
return result;
} catch (HibernateException e) {
throw e;
}
}
public int executeUpdate(final String query) throws HibernateException{
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
SQLQuery sQLQuery= session.createSQLQuery(query);
int result = sQLQuery.executeUpdate();
if(close)
session.close();
return result;
} catch (HibernateException e) {
throw e;
}
}
public int getCountFromSQL(final String query) throws HibernateException{
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
SQLQuery sQLQuery= session.createSQLQuery(query);
List<?> resultList = sQLQuery.list();
int result = DataAccessUtils.intResult(resultList);
if(close)
session.close();
return result;
}catch (Error e) {
throw e;
}catch (Exception e) {
throw new HibernateException(e);
}
}
public List<?> getPagedListFromSQL(final Class<?> genericClass,final String query,final int start,final int lenght) throws HibernateException{
try{
Session session = null;
boolean close = false;
try{
session = hibernateTemplate.getSessionFactory().getCurrentSession();
}catch(HibernateException e){
session = hibernateTemplate.getSessionFactory().openSession();
close = true;
}
SQLQuery sQLQuery= session.createSQLQuery(query);
sQLQuery.addEntity(genericClass);
sQLQuery.setFirstResult(start);
sQLQuery.setMaxResults(lenght);
List<?> result = sQLQuery.list();
if(close)
session.close();
return result;
} catch (HibernateException e) {
throw e;
}
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
}