BaseHibernateDaoSupport.java
package com.tradecloud.repository.base.impl;
import org.hibernate.*;
import org.hibernate.criterion.DetachedCriteria;
import org.postgresql.util.PSQLException;
import javax.annotation.Resource;
import java.util.List;
public class BaseHibernateDaoSupport extends org.springframework.orm.hibernate5.support.HibernateDaoSupport {
@Resource(name = "sessionFactory")
public void setSuperSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
public final Session getHTemplate() {
return getCurrentSession();
}
public Session getSessionCustom() {
return getCurrentSession();
}
public Session getCurrentSession() {
try {
return super.getSessionFactory().getCurrentSession();
} catch (SessionException e) {
logger.debug("Error getting session, attempt opening session");
return super.getSessionFactory().openSession();
}
}
public Session getCurrentSessionNoMulti() {
return super.getSessionFactory().getCurrentSession();
}
public Session getSession() {
return getCurrentSession();
}
public List<?> getNamedQueryAndNamedParam(String queryName, String paramName, Object parm) {
Query query = getCurrentSession().getNamedQuery(queryName);
query.setParameter(paramName, parm);
return (List<?>) query.list();
}
public List<?> getNamedQueryAndNamedParamList(String queryName, String paramName, List<?> parmList) {
Query query = getCurrentSession().getNamedQuery(queryName);
query.setParameterList(paramName, parmList);
return (List<?>) query.list();
}
public List<?> getNamedQueryAndNamedParam(String queryName, String[] paramName, Object[] paramValue) {
Query query = getCurrentSession().getNamedQuery(queryName);
for (int i = 0; i < paramName.length; i++) {
query.setParameter(paramName[i], paramValue[i]);
}
return (List<?>) query.list();
}
public List<?> findByNamedQuery(String queryName) {
return (List<?>) getCurrentSession().getNamedQuery(queryName).list();
}
public List<?> findByNamedParam(String query, String paramName, Object paramValue) {
return (List<?>) getCurrentSession().createQuery(query).setParameter(paramName, paramValue).list();
}
public List<?> findByNamedParam(String query, String[] paramName, Object[] paramValue) {
Query query1 = getCurrentSession().createQuery(query);
for (int i = 0; i < paramName.length; i++) {
query1.setParameter(paramName[i], paramValue[i]);
}
return query1.list();
}
public List<?> findByCriteria(DetachedCriteria detachedCriteria) {
return (List<?>) detachedCriteria.getExecutableCriteria(getCurrentSession()).list();
}
public List<?> getNamedQuery(String queryName) {
return (List<?>) getCurrentSession().getNamedQuery(queryName).list();
}
public List<?> getNamedQuery(String queryName, Integer limit) {
Query query = getCurrentSession().getNamedQuery(queryName);
if (limit != null && limit > 0) {
query.setMaxResults(limit);
}
return (List<?>) query.list();
}
public List<?> getNamedQuery(String queryName, Object... params) {
Query query = getCurrentSession().getNamedQuery(queryName);
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
return (List<?>) query.list();
}
public List<?> loadAll(Class className) {
Query query = getCurrentSession().createQuery("from " + className.getSimpleName());
query.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return (List<?>) query.list();
}
public List<?> find(String sql) {
return (List<?>) getCurrentSession().createQuery(sql).list();
}
public void deleteAll(List<?> toDelete) {
for (Object o : toDelete)
try {
getCurrentSession().delete(o);
} catch (Exception e) {
handleDeleteConstraint(e.getClass().getSimpleName(), e);
throw e;
}
}
protected void handleDeleteConstraint(String name, Exception e) {
Throwable cause = e;
while (cause != null) {
if (cause instanceof PSQLException) {
PSQLException pgEx = (PSQLException) cause;
if ("23503".equals(pgEx.getSQLState())) {
throw new IllegalStateException(String.format(
"Cannot delete [%s] since it is in use by [%s]",
name,
pgEx.getServerErrorMessage() != null ? pgEx.getServerErrorMessage().getTable() : "unknown"
));
}
}
cause = cause.getCause();
}
}
}