hibernate 事物的疑问

假如有一下操作

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不是把缓存的东西刷到数据库,而是做好准备

不好意思,其实我没自己看清楚,如果是大批量操作数据库,怕内存溢出可以定量安排flush()

我又仔细看了下你的代码
你把transation实例化出来下
也就是Transaction tx= getSession().beginTransaction();
最后tx.commit()
这也可能是原因


还有rollback()你就放在catch里
你刚才没反应是因为没有exception啊

你save(A)之后 flash下session
然后再存B 看看结果
直接save两个,应该不可以