мы разрабатываем приложение J2SE и используем Hibernate для нашего уровня персистентности. Для доступа к нашей базе данных я создал одноэлементный класс, который имеет все необходимые методы для получения и сохранения объектов из базы данных. Но как только я создал второй способ получения объектов, я сразу понял, что у меня вонючий код:
public enum DataManager {
Instance;
public List<Employee> getEmployees() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
List<?> ems = em.createQuery("select e from Employee e").getResultList();
List<Employee> result = new ArrayList<Employee>();
for (Object o : ems )
result.add((Employee) o);
tx.commit();
em.close();
emf.close();
return result;
}
public List<Shift> getShifts() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
List<?> ems = em.createQuery("select s from Shift s").getResultList();
List<Shift> result = new ArrayList<Shift>();
for (Object o : ems )
result.add((Shift) o);
tx.commit();
em.close();
emf.close();
return result;
}
}
Так что мне определенно нужно переделать это. Документация Hibernate имеет класс HibernateUtility для обработки сеансов и транзакций. Но я использую EntityManager.
Буквально вчера я обнаружил эту очень интересную статью под названием Общий шаблон DAO с JDK 5.0 . Он написан в 2005 году, поэтому я действительно не уверен, что он все еще действителен. Он снова использует сеансы.
Это то, что вы используете? Если нет, есть лучшее решение?
Спасибо.
Примечание 1: я довольно новичок в Hibernate
Примечание 2: название не выглядит правильным