我在这里缺少什么(Hibernate开始交易)

时间:2015-08-24 08:31:25

标签: java hibernate

我有一个测试类:

 class SomeTest {
       public static void main(String args[]){
       Client kom = new Client();
       kom.setId(kom.newID());
       kom.setClient("OldName");
       SessionFactory sessionFactory =  new    Configuration().configure().buildSessionFactory();
       Session session = sessionFactory.openSession();
       session.beginTransaction();
          session.save(kom); // I think insert is here ?
          Query q = session.createSQLQuery(" call change_name(:old, :new) ");
          q.setParameter("old","OldName");
          q.setParameter("new","NewName");
          int result = q.executeUpdate();
          session.getTransaction().commit();
        }
     };

数据库存储过程change_name更新客户端的名称..每次运行测试我有一个旧名称记录?我希望更新是在同一个事务中执行的,我从来没有看到旧名称?

1 个答案:

答案 0 :(得分:0)

JB Nizet有正确答案..

save()不会插入。它将对象与会话相关联。插入查询在下一次刷新时执行。因此,在调用存储过程之前,请显式调用flush。 - JB Nizet昨天

还有FlushMode ......我设置为ALWAYS。我调用了许多改变数据库中数据的程序。