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(); } } }