Я начинаю с Hibernate и пытаюсь сохранить некоторые данные в моей базе данных из веб-приложения.Не удается сохранить мои данные с помощью 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 вариант:
< имя свойства = "hibernate.hbm2ddl.auto" значение = "создать" />
и это создает ОК мои таблицы. Поэтому я считаю, что моя проблема в том, что мне нужно сделать мой код транзакционным. но как я могу это сделать?
Если я пытаюсь сделать:
em.getTransaction(); //....
дает ошибку (я думаю, потому что я объявил мой тип сделки как «ССТ» на моем 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
Но в любом случае, некоторые toughts на это будет Welcom.
Это дает мне ошибку, потому что я указал на мой тип транзакции persistence.xml JTA. (Я думаю, что это причина того, что я не могу использовать транзакцию). – artaxerxe