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.
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