package sample; 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; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.Transaction; import net.sf.hibernate.cfg.Configuration; /** * Hibernate版従業員DataAccessObject */ public class HibernateEmployeeDAO { /** * セッション */ private Session session; /** * コンストラクタ * @param session セッション */ public HibernateEmployeeDAO(Session session){ this.session = session; } /** * 指定した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{ Configuration cfg = null; SessionFactory sessionFactory = null; Session session = null; Transaction transaction = null; try{ //構成情報の読み込み cfg = new Configuration().configure(); //セッションファクトリをビルド sessionFactory = cfg.buildSessionFactory(); //セッションを取得 session = sessionFactory.openSession(); //トランザクションを開始 transaction = session.beginTransaction(); HibernateEmployeeDAO dao = new HibernateEmployeeDAO(session); //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); } //コミット transaction.commit(); }catch (Exception e){ //ロールバック if(transaction != null){ transaction.rollback(); } e.printStackTrace(); }finally{ //常にセッションを閉じる if(session != null){ session.close(); } } } }