package edu.sjtu.infosec.ismp.manager.AM.dao.impl; import java.io.Serializable; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import edu.sjtu.infosec.ismp.manager.AM.dao.AssetPositionDao; import edu.sjtu.infosec.ismp.manager.AM.model.AssetPositionBO; import edu.sjtu.infosec.ismp.manager.comm.model.page.Page; /** * AssetPositionDao接口的实现类 * * @author Breggor * */ @SuppressWarnings("unchecked") public class AssetPositionDaoImpl extends HibernateDaoSupport implements AssetPositionDao { /** * 实现接口方法 */ public void saveAssetPosition(AssetPositionBO entity) { getHibernateTemplate().save(entity); } public void updateAssetPosition(AssetPositionBO entity) { getHibernateTemplate().update(entity); } public void deleteAssetPosition(AssetPositionBO entity) { getHibernateTemplate().delete(entity); } public List<AssetPositionBO> getListByAssetPosition(AssetPositionBO entity) { return (List<AssetPositionBO>) spliceCriteria(entity).list(); } public AssetPositionBO getAssetPosition(Serializable entityId) { return (AssetPositionBO) getHibernateTemplate().get( AssetPositionBO.class, entityId); } public List<AssetPositionBO> getChildNodeByPosition(Serializable positionId) { String hql = "from AssetPositionBO posi where posi.positionId=:positionId"; Query query = getSession().createQuery(hql); query.setParameter("positionId", positionId); return query.list(); } public List<AssetPositionBO> getChildNodeListByParent(Serializable rootId) { String hql = "from AssetPositionBO posi where posi.parentId=:rootId"; Query query = getSession().createQuery(hql); query.setParameter("rootId", rootId); return query.list(); } public List<AssetPositionBO> getPageByAssetPosition(AssetPositionBO entity, Page page) { Criteria criteria = spliceCriteria(entity); criteria.setFirstResult(page.getBeginIndex()); criteria.setMaxResults(page.getEveryPage()); return criteria.list(); } public int getCountByAssetPosition(AssetPositionBO entity) { int count = 0; Criteria criteria = spliceCriteria(entity); count = ((Integer) criteria.setProjection(Projections.rowCount()) .uniqueResult()).intValue(); return count; } public List<AssetPositionBO> getChildNodeListByParent(AssetPositionBO entity) { Criteria criteria = spliceCriteria(entity); criteria.addOrder(Order.desc("parentId")); return criteria.list(); } private Criteria spliceCriteria(AssetPositionBO assetPosition) { Criteria criteria = getSession().createCriteria(AssetPositionBO.class); if (null == assetPosition) { return criteria; } if (null != assetPosition.getId()) { criteria.add(Restrictions.eq("id", assetPosition.getId())); } if (null != assetPosition.getParentId()) { criteria.add(Restrictions.eq("parentId", assetPosition .getParentId())); } if (null != assetPosition.getDescription() && assetPosition.getDescription().trim().length() > 0) { criteria.add(Restrictions.like("description", "%" + assetPosition.getDescription().trim() + "%")); } return criteria; } public boolean getChildNodeByPositionId(String nodeName, int posId) { String HQL = "select count(*) from AssetPositionBO bo where bo.description=:nodeName and bo.positionId=:posId"; Query query = getSession().createQuery(HQL); query.setParameter("nodeName", nodeName); query.setParameter("posId", posId); int row = ((Long) query.uniqueResult()).intValue(); if (row > 0) { return true; } return false; } public boolean getChildNodeByParentId(String nodeName, int parentId) { String HQL = "select count(*) from AssetPositionBO bo where bo.description=:nodeName and bo.parentId=:parentId"; Query query = getSession().createQuery(HQL); query.setParameter("nodeName", nodeName); query.setParameter("parentId", parentId); int row = ((Long) query.uniqueResult()).intValue(); if (row > 0) { return true; } return false; } public List<AssetPositionBO> getChildNodes(Serializable rootId) { String hql = "from AssetPositionBO posi where posi.parentId=:rootId"; Query query = getSession().createQuery(hql); query.setParameter("rootId", rootId); return query.list(); } public AssetPositionBO getParentNodeListByChild(Serializable entityId) { String hql = "from AssetPositionBO posi where posi.id= (select parentId from AssetPositionBO apb where apb.id =:entityId)"; Query query = getSession().createQuery(hql); query.setParameter("entityId", entityId); return (AssetPositionBO) query.uniqueResult(); } public AssetPositionBO getNodeListById(Serializable entityId) { String hql = "from AssetPositionBO posi where posi.id=:entityId"; Query query = getSession().createQuery(hql); query.setParameter("entityId", entityId); return (AssetPositionBO) query.uniqueResult(); } }