[英]What I am missing here (Hibernate begin transaction)
我有一个测试课:
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进行客户端名称的更新..每次运行测试时,我都有一条带有旧名称的记录? 我希望更新是在同一事务中执行的,并且我永远都不会看到旧名称?
JB Nizet有正确答案。
save()不会插入。 它将对象与会话相关联。 插入查询在下一次刷新时执行。 因此,在调用存储的proc之前,显式调用flush。 –昨天,JB Nizet
还有FlushMode ...我总是设置为。 我调用了许多程序来更改数据库中的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.