我有一个测试类:
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更新客户端的名称..每次运行测试我有一个旧名称记录?我希望更新是在同一个事务中执行的,我从来没有看到旧名称?
答案 0 :(得分:0)
JB Nizet有正确答案..
save()不会插入。它将对象与会话相关联。插入查询在下一次刷新时执行。因此,在调用存储过程之前,请显式调用flush。 - JB Nizet昨天
还有FlushMode ......我设置为ALWAYS。我调用了许多改变数据库中数据的程序。