package org.akaza.openclinica.dao.hibernate;
import java.io.Serializable;
import java.util.ArrayList;
import org.akaza.openclinica.domain.CompositeIdDomainObject;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;
public abstract class CompositeIdAbstractDomainDao<T extends CompositeIdDomainObject> {
private HibernateTemplate hibernateTemplate;
abstract Class<T> domainClass();
public String getDomainClassName() {
return domainClass().getName();
}
@SuppressWarnings("unchecked")
@Transactional
public ArrayList<T> findAll() {
getSessionFactory().getStatistics().logSummary();
String query = "from " + getDomainClassName() + " do";
org.hibernate.Query q = getCurrentSession().createQuery(query);
return (ArrayList<T>) q.list();
}
@Transactional
public T saveOrUpdate(T domainObject) {
getSessionFactory().getStatistics().logSummary();
getCurrentSession().saveOrUpdate(domainObject);
return domainObject;
}
@Transactional
public Serializable save(T domainObject) {
getSessionFactory().getStatistics().logSummary();
Serializable id = getCurrentSession().save(domainObject);
return id;
}
@Transactional
public T findByColumnName(Object id,String key) {
String query = "from " + getDomainClassName() + " do where do."+key +"= ?";
org.hibernate.Query q = getCurrentSession().createQuery(query);
q.setParameter(0, id);
return (T) q.uniqueResult();
}
public Long count() {
return (Long) getCurrentSession().createQuery("select count(*) from " + domainClass().getName()).uniqueResult();
}
public SessionFactory getSessionFactory() {
return hibernateTemplate.getSessionFactory();
}
/**
* @return Session Object
*/
public Session getCurrentSession() {
return getSessionFactory().getCurrentSession();
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}