2010-11-19 15 views
0

私はHibernateを使い始めて、Webアプリケーションから私のDBにデータを保存しようとしています。私のデータを休止状態で維持できません

私のサーブレットのコードはここにある:

javax.persistence.TransactionRequiredException:

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(); 
    } 
} 

私の問題は、それは私にエラーを与えることである何のトランザクションが進行中でない

私はpersistence.xmlにオプションを入れました:

<プロパティ名= "hibernate.hbm2ddl.auto" 値= "作成" />

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

私がしようとした場合:

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

しかし、いずれにせよ、この上でいくつかのtoughtsはようこそとなります。

答えて

0

試しましたか?

em.beginTransaction(); 

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

+0

私はpersistence.xmlファイルJTAトランザクションタイプで指定したため、エラーが表示されます。 (私はそれが私がトランザクションを使用することができないものの理由だと思う)。 – artaxerxe

関連する問題