2010-11-19 2 views
0

Я начинаю с 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.

ответ

0

Вы пробовали?

em.beginTransaction(); 

и в конце вам необходимо будет совершить или отменить свою транзакцию с помощью уважаемых методов.

+0

Это дает мне ошибку, потому что я указал на мой тип транзакции persistence.xml JTA. (Я думаю, что это причина того, что я не могу использовать транзакцию). – artaxerxe