Newer
Older
alarm / src / com / casic / core / hibernate / HibernateEntityDao.java
zhout on 2 Mar 2022 5 KB first commit
 package com.casic.core.hibernate;

 import com.casic.core.page.Page;
 import com.casic.core.util.GenericsUtils;
 import org.hibernate.Criteria;
 import org.hibernate.SessionFactory;
 import org.hibernate.criterion.Criterion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.transaction.annotation.Transactional;

 import java.io.Serializable;
 import java.lang.reflect.InvocationTargetException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 public class HibernateEntityDao<T> extends HibernatePagingDao
 {
   private static Logger logger = LoggerFactory.getLogger(HibernateEntityDao.class);
   private Class<T> entityClass;
 
   public HibernateEntityDao()
   {
     this.entityClass = GenericsUtils.getSuperClassGenricType(getClass());
   }
 
   public HibernateEntityDao(SessionFactory sessionFactory)
   {
     this();
     super.setSessionFactory(sessionFactory);
   }
 
   public HibernateEntityDao(SessionFactory sessionFactory, Class<T> entityClass)
   {
     super(sessionFactory);
     this.entityClass = entityClass;
   }
 
   public Class<T> getEntityClass()
   {
     return this.entityClass;
   }
 
   public void setEntityClass(Class<T> entityClass)
   {
     this.entityClass = entityClass;
   }
 
   @Transactional(readOnly=true)
   public T get(Serializable id)
   {
     return get(this.entityClass, id);
   }
 
   @Transactional(readOnly=true)
   public T load(Serializable id)
   {
     return load(this.entityClass, id);
   }
 
   @Transactional(readOnly=true)
   public List<T> getAll()
   {
     return getAll(this.entityClass);
   }
 
   @Transactional(readOnly=true)
   public List<T> getAll(String orderBy, boolean isAsc)
   {
     return getAll(this.entityClass, orderBy, isAsc);
   }
 
   @Transactional
   public void removeById(Serializable id)
   {
     remove(get(id));
   }
 
   @Transactional
   public void removeAll()
   {
     removeAll(getAll());
   }
 
   @Transactional
   public void save(Object entity)
   {
     try {
       Object o = entity;
       boolean isCreated = getId(this.entityClass, o) == null;
       super.save(entity);
 
       if (isCreated)
         publishEvent(new EntityCreatedEvent(o));
       else
         publishEvent(new EntityUpdatedEvent(o));
     }
     catch (NoSuchMethodException ex) {
       logger.warn(ex.getMessage(), ex);
       super.save(entity);
     } catch (IllegalAccessException ex) {
       logger.warn(ex.getMessage(), ex);
       super.save(entity);
     } catch (InvocationTargetException ex) {
       logger.warn(ex.getMessage(), ex);
       super.save(entity);
     }
   }
 
   @Transactional
   public void remove(Object entity)
   {
     Object o = entity;
     super.remove(entity);
     publishEvent(new EntityRemovedEvent(o));
   }
 
   public Criteria createCriteria(Criterion[] criterions)
   {
     return createCriteria(this.entityClass, criterions);
   }
 
   public Criteria createCriteria(String orderBy, boolean isAsc, Criterion[] criterions)
   {
     return createCriteria(this.entityClass, orderBy, isAsc, criterions);
   }
 
   @Transactional(readOnly=true)
   public List<T> findBy(String name, Object value)
   {
     return findBy(this.entityClass, name, value);
   }
 
   @Transactional(readOnly=true)
   public List<T> findByIds(List ids)
   {
     return findByIds(this.entityClass, ids);
   }
 
   @Transactional(readOnly=true)
   public List<T> findByLike(String name, Object value)
   {
     return findByLike(this.entityClass, name, value);
   }
 
   @Transactional(readOnly=true)
   public T findUniqueBy(String name, Object value)
   {
     return findUniqueBy(this.entityClass, name, value);
   }
 
   @Transactional(readOnly=true)
   public Integer getCount()
   {
     return getCount(this.entityClass);
   }
 
   @Transactional(readOnly=true)
   public Page pagedQuery(int pageNo, int pageSize, Criterion[] criterions)
   {
     return pagedQuery(this.entityClass, pageNo, pageSize, criterions);
   }
 
   @Transactional(readOnly=true)
   public Page pagedQuery(int pageNo, int pageSize, String orderBy, boolean isAsc, Criterion[] criterions)
   {
     logger.debug("start");
 
     return pagedQuery(this.entityClass, pageNo, pageSize, orderBy, isAsc, criterions);
   }
 
   public List<T> findBy(String propertyName, Object propertyValue, MatchType matchType)
   {
     return find(this.entityClass, new Criterion[] { HibernateUtils.buildCriterion(propertyName, propertyValue, matchType) });
   }
 
   public List<T> find(List<PropertyFilter> propertyFilters)
   {
     return find(this.entityClass, HibernateUtils.buildCriterion(propertyFilters));
   }
 
   public Page pagedQuery(int pageNo, int pageSize, List<PropertyFilter> propertyFilters)
   {
     return pagedQuery(this.entityClass, pageNo, pageSize, HibernateUtils.buildCriterion(propertyFilters));
   }
 
   public Page pagedQuery(Page page, List<PropertyFilter> propertyFilters)
   {
     return pagedQuery(this.entityClass, page, HibernateUtils.buildCriterion(propertyFilters));
   }
 
   public Page pagedQuery(String hql, Page page, List<PropertyFilter> propertyFilters)
   {
     return pagedQuery(hql, page.getPageNo(), page.getPageSize(), propertyFilters);
   }
 
   public Page pagedQuery(String hql, int pageNo, int pageSize, List<PropertyFilter> propertyFilters)
   {
     StringBuffer buff = new StringBuffer(hql);
     Map map = new HashMap();
 
     for (PropertyFilter propertyFilter : propertyFilters) {
       HibernateUtils.buildQuery(buff, propertyFilter);
 
       String key = propertyFilter.getPropertyName().replaceAll("\\.", "_");
 
       map.put(key, propertyFilter.getMatchValue());
     }
 
     return pagedQuery(buff.toString(), pageNo, pageSize, map);
   }
 }