package util;
import java.util.Iterator;
import java.util.List;
import entity.Employee;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.LockMode;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
/**
* Hibernate版従業員DataAccessObject
*/
public class HibernateEmployeeDAO {
/**
* セッション
*/
private Session session;
/**
* コンストラクタ
*/
public HibernateEmployeeDAO() throws HibernateException{
this.session = SessionManager.getCurrentSession();
}
/**
* 指定したIDの従業員を取得する
* @param id 従業員ID
* @param lock 行ロックを行うかどうか
* @return Employee
* @throws SQLException
*/
public Employee get(Integer id, boolean lock) throws HibernateException{
LockMode lockMode = LockMode.NONE;
if( lock ){
lockMode = LockMode.UPGRADE;
}
return (Employee) session.get(Employee.class, id, lockMode);
}
/**
* 部門名に対応する従業員のリストを返す
* @param departmentName 部門名
* @param lock 行ロックを行うかどうか
* @return List
* @throws HibernateException
*/
public List getListByDepartmentName(String departmentName, boolean lock) throws HibernateException{
Query query = session.getNamedQuery("entity.Employee.getListByDepartmentName");
query.setParameter("departmentName", departmentName);
if( lock ){
query.setLockMode("e", LockMode.UPGRADE);
}
return query.list();
}
/**
* 従業員を挿入する
* @param emp 従業員
* @throws HibernateException
*/
public void insert(Employee emp) throws HibernateException{
session.save(emp);
}
/**
* 従業員を削除する
* @param emp 従業員
* @throws HibernateException
*/
public void delete(Employee emp) throws HibernateException{
session.delete(emp);
}
/**
* 従業員を更新する
* @param emp 従業員
* @throws HibernateException
*/
public void update(Employee emp) throws HibernateException{
//session.update(emp);
}
/**
* サンプルコードメイン
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception{
try{
SessionManager.beginTransaction();
HibernateEmployeeDAO dao = new HibernateEmployeeDAO();
//IT部門の従業員のリストを取得
List employees = dao.getListByDepartmentName("IT", true);
Iterator ite = employees.iterator();
//給与を1000円値上げ
while(ite.hasNext()){
Employee emp = (Employee) ite.next();
int salary = emp.getSalary().intValue();
emp.setSalary( new Integer(1000 + salary) );
//従業員の更新
dao.update(emp);
}
//コミット
SessionManager.commit();
}catch (Exception e){
//ロールバック
SessionManager.rollback();
e.printStackTrace();
}finally{
//常にセッションを閉じる
SessionManager.closeSession();
}
}
}