【发布时间】:2010-11-19 17:21:57
【问题描述】:
我开始使用 Hibernate,并尝试将一些数据从 Web 应用程序保存到我的数据库中。
我的 servlet 代码在这里:
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(); //....
它给出了错误(我认为是因为我在我的 persistence.xml 上将我的事务类型声明为“JTA”)。
那么,有人可以帮我解决这个问题吗?
提前致谢。
我通过这样做解决了我的问题:
Context ic = new InitialContext();
UserTransaction ut = (UserTransaction)ic.lookup("java:comp/UserTransaction");
ut.begin();
//...transactional code
ut.commit();
但无论如何,欢迎对此提出一些建议。
【问题讨论】:
标签: hibernate jakarta-ee jta