Я начинаю работать с Hibernate и пытаюсь сохранить некоторые данные в моей БД из веб-приложения.
Мой код сервлета находится здесь:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter pr = response.getWriter();
ServletContext ctx = super.getServletContext();
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("agricultural-register-server");
EntityManager em = emf.createEntityManager();
em.joinTransaction();
VolumeType vt = new VolumeType(1, "asd");
Volume v = new Volume("a", "b", "c", 123123, vt, 1);
em.persist(vt);
em.persist(v);
em.flush();
em.close();
RequestDispatcher dispatcher = ctx.getRequestDispatcher("/index.jsp");
dispatcher.forward(request, response);
} catch (Exception e) {
pr.println("Error occured while testing");
e.printStackTrace();
}
}
Моя проблема в том, что онвыдает ошибку:
javax.persistence.TransactionRequiredException: транзакция не выполняется
Я добавил в свой файл persistence.xml параметр:
, и это создает нормально мои таблицы.Поэтому я думаю, что моя проблема в том, что мне нужно сделать свой код транзакционным.но как я могу это сделать?
Если я попытаюсь сделать:
em.getTransaction(); //....
, это выдаст ошибку (я думаю, потому что я объявил свой тип транзакции как "JTA" в моем файле persistence.xml).
Итак, кто-нибудь может мне помочь с этим?
Заранее спасибо.
Я решил свою проблему, выполнив следующее:
Context ic = new InitialContext();
UserTransaction ut = (UserTransaction)ic.lookup("java:comp/UserTransaction");
ut.begin();
//...transactional code
ut.commit();
Справка найдена по этой ссылке: http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/transactions/transactions6.html
Но, в любом случае, некоторые проблемы будут приветствоваться.