【问题标题】:Can't persist my data with hibernate无法使用休眠保存我的数据
【发布时间】: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();

在此链接找到帮助:http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/transactions/transactions6.html

但无论如何,欢迎对此提出一些建议。

【问题讨论】:

    标签: hibernate jakarta-ee jta


    【解决方案1】:

    你试过了吗?

    em.beginTransaction();
    

    最后,您需要借助受尊重的方法提交或回滚您的事务。

    【讨论】:

    • 它给了我错误,因为我在我的 persistence.xml 文件中指定了 JTA 事务类型。 (我认为这就是我不能使用事务的原因。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2017-05-09
    • 1970-01-01
    • 2011-09-29
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多