Вставить предложение HQL, не обновляющее базу данных

Вот сервлет, который выполняет операцию вставки:

InsertClause.java

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    try (PrintWriter out = response.getWriter()) {
        /* TODO output your page here. You may use following sample code. */
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet HibInsert</title>");            
        out.println("</head>");
        out.println("<body>");

        Configuration cfg= new Configuration();
        cfg= cfg.configure("hibernate.cfg.xml");
        SessionFactory sf= cfg.buildSessionFactory();
        Session ses=sf.openSession();
        Transaction tx= ses.beginTransaction();
        out.println("execution...");    

        Query q= ses.createQuery("insert into Student(id,age) select ns.id,ns.age from NewStudent ns where ns.id=109");

        int res= q.executeUpdate();
        out.println("transfer successfull !!<br/>");
        out.println("number of records transferred: "+res);

        out.println("</body>");
        out.println("</html>");
    }
}

Другие файлы, используемые в приложении:

1.Student.java (POJO)

2.NewStudent.java (POJO)

3.студент.hbm.xml

4.newstudent.hbm.xml

5.hibernate.cfg.xml

В базе данных используются две таблицы: newstudent и mystudent

Вывод в браузере получаю:

передача прошла успешно!!

количество переданных записей: 1

Но в базе данных, когда я открываю таблицу mystudent, запись не вставляется! Так что же могло пойти не так?


person user3435052    schedule 24.05.2014    source источник


Ответы (1)


Вам необходимо зафиксировать транзакцию после метода executeUpdate().

Transaction tx= ses.beginTransaction();
out.println("execution...");    

Query q= ses.createQuery("insert into Student(id,age) select ns.id,ns.age 
                             from NewStudent ns where ns.id=109");

int res= q.executeUpdate();
tx.commit(); // Add this line.
person Masudul    schedule 24.05.2014
comment
Благодарность!. На самом деле я пытался использовать tx.commit() до «executeupdate». Теперь я понял это правильно. - person user3435052; 24.05.2014