package edu.sjtu.infosec.ismp.manager.RAM.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import edu.sjtu.infosec.ismp.manager.RAM.dao.DynaVTARepoDao;
import edu.sjtu.infosec.ismp.manager.RAM.model.AsseInfoProj;
import edu.sjtu.infosec.ismp.manager.RAM.model.AsseKnowDynaVTARepo;
import edu.sjtu.infosec.ismp.manager.comm.model.page.Page;
/**
* 数据层 知识库动态V-T-A-R评估报告Dao实现类.
**/
public class DynaVTARepoDaoImpl extends HibernateDaoSupport implements DynaVTARepoDao {
/**
* 批量保存/更新V-T-A-R评估记录
* @param dynaVTARepoList
* V-T-A-R评估记录集合
**/
@SuppressWarnings("unchecked")
public void batchSaveOrUpdate(final List<AsseKnowDynaVTARepo> dynaVTARepoList) {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,SQLException {
for(int i=0;i<dynaVTARepoList.size();i++) {
AsseKnowDynaVTARepo dynaVTARepo = (AsseKnowDynaVTARepo) dynaVTARepoList.get(i);
session.merge(dynaVTARepo);
System.out.println("batch saved dynaVTARepo:"+dynaVTARepo.toString());
if((i+1)%20 == 0){
session.flush();
session.clear();
}
}
return null;
}
});
}
/**
* 查询项目V-T-A-R评估记录
* @param id
* V-T-A-R评估记录id
* @return V-T-A-R评估记录对象
**/
public AsseKnowDynaVTARepo find(Integer id) {
AsseKnowDynaVTARepo dynaVTARepo = null;
dynaVTARepo = (AsseKnowDynaVTARepo) getHibernateTemplate().load(AsseKnowDynaVTARepo.class, id);
return dynaVTARepo;
}
/**
* 查询项目V-T-A-R评估记录数
* @param asseInfoProj
* 测评项目
* @return 项目V-T-A-R评估记录数
**/
public int getCount(AsseInfoProj asseInfoProj) {
Criteria criteria = getSession().createCriteria(AsseKnowDynaVTARepo.class)
.addOrder(Order.asc("id"));
if(asseInfoProj!=null ) {
criteria.add(Expression.eq("asseInfoProj", asseInfoProj));
}
return criteria.list().size();
}
/**
* 返回项目V-T-A-R评估记录列表
* @param asseInfoProj
* 测评项目
* @return 项目V-T-A-R评估记录列表
**/
public List<AsseKnowDynaVTARepo> listDynaVTARepo(AsseInfoProj asseInfoProj) {
Criteria criteria = getSession().createCriteria(AsseKnowDynaVTARepo.class)
.addOrder(Order.asc("id"));
if(asseInfoProj!=null ) {
criteria.add(Expression.eq("asseInfoProj", asseInfoProj));
}
return criteria.list();
}
/**
* 查询项目V-T-A-R评估记录分页记录
* @param page
* 分页对象
* @param asseInfoProj
* 测评项目
* @return 分页记录列表
**/
public List<AsseKnowDynaVTARepo> listDynaVTARepoPage(Page page,
AsseInfoProj asseInfoProj) {
Criteria criteria = getSession().createCriteria(AsseKnowDynaVTARepo.class)
.addOrder(Order.asc("id"));
if(page!=null) {
criteria.setFirstResult(page.getBeginIndex());
criteria.setMaxResults(page.getEveryPage());
}
if(asseInfoProj!=null ) {
criteria.add(Expression.eq("asseInfoProj", asseInfoProj));
}
return criteria.list();
}
/**
* 删除项目V-T-A-R评估记录
* @param dynaVTARepo
* 项目V-T-A-R评估记录
**/
public void remove(AsseKnowDynaVTARepo dynaVTARepo) {
getHibernateTemplate().delete(dynaVTARepo);
}
/**
* 保存/更新项目V-T-A-R评估记录
* @param dynaVTARepo
* 项目V-T-A-R评估记录
**/
public void saveOrUpdate(AsseKnowDynaVTARepo dynaVTARepo) {
getHibernateTemplate().saveOrUpdate(dynaVTARepo);
}
public List executeHQL(String hql) {
return getHibernateTemplate().find(hql);
}
}