2010-11-19 11 views
0

Je commence avec Hibernate et essaie d'enregistrer des données dans ma base de données à partir d'une application web.Impossible de conserver mes données avec Hibernate

Mon code servlet est ici:

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

Mon problème est que cela me donne l'erreur:

javax.persistence.TransactionRequiredException: aucune transaction est en cours

J'ai mis dans mon persistence.xml l'option:

< property name = valeur "hibernate.hbm2ddl.auto" = "créer" />

et crée ok mes tables. Donc, je pense que mon problème est que je dois rendre mon code transactionnel. mais comment puis-je faire ça?

Si je tente de faire:

em.getTransaction(); //.... 

il donne l'erreur (je pense parce que je déclarais mon type de transaction comme "JTA" sur mon persistence.xml).

Alors, quelqu'un peut-il m'aider avec ça?

Merci d'avance.


Je résolu mon problème en faisant ceci:

Context ic = new InitialContext(); 
UserTransaction ut = (UserTransaction)ic.lookup("java:comp/UserTransaction"); 
ut.begin(); 
//...transactional code 

ut.commit(); 

Aide trouvé à ce lien: http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/transactions/transactions6.html

Mais de toute façon, certains toughts à ce sujet seront Welcom.

Répondre

0

Avez-vous essayé? Et à la fin, vous devrez valider ou annuler votre transaction avec l'aide de méthodes respectées.

+0

Il me donne une erreur parce que j'ai spécifié sur mon fichier persistence.xml type de transaction JTA. (Je pense que c'est la raison pour laquelle je ne peux pas utiliser la transaction.) – artaxerxe