假如有一下操作
getSession().beginTransaction();
A a=new A();
B b=new B();
try{
session.save(A);
session.save(B);
getSession().beginTransaction().commit();
}
catch{
}
我在保存B的时候出错,不管我catch里面写不写 rollback(),好像数据库里面都没有数据,意思就是 是不是如果我不写rollback(),它是不是也是自动回滚的呢?
[quote]flush是将hibernate缓存中的数据刷入数据库,实际操作中,我们不可能没save一个都flush下吧,那么这个rollback方法到底什么时候用呢?
[/quote]
Hibernate的机制 ,只有commit才执行工作
也就是说,就算你save了,flush了,没有transation.commit()数据库一样没反应
commit动作包含了隐性的flush
在commit之前,flush会执行sql语句,并且保持内存syncho和persist
flush不是把缓存的东西刷到数据库,而是做好准备
我又仔细看了下你的代码
你把transation实例化出来下
也就是Transaction tx= getSession().beginTransaction();
最后tx.commit()
这也可能是原因
还有rollback()你就放在catch里
你刚才没反应是因为没有exception啊
你save(A)之后 flash下session
然后再存B 看看结果
直接save两个,应该不可以