0

Hibernate を使い始めて、Web アプリから DB にデータを保存しようとしています。

私のサーブレットコードはここにあります:

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に入れました:

<property name="hibernate.hbm2ddl.auto" value="create"/>

そして、それは私のテーブルを作成します。だから私の問題は、コードをトランザクション対応にする必要があることだと思います。しかし、どうすればそれを行うことができますか?

私がやろうとすると:

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

とにかく、これに関するいくつかの意見は歓迎されます。

4

1 に答える 1

0

やってみました?

em.beginTransaction();

そして最後に、尊敬されるメソッドの助けを借りて、トランザクションをコミットまたはロールバックする必要があります。

于 2010-11-19T17:27:39.813 に答える