oraclejava8 2011-06-01 20:01
浏览 223
已采纳

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(),它是不是也是自动回滚的呢?

  • 写回答

2条回答 默认 最新

  • xiaoyingSUN 2011-06-01 21:58
    关注

    [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啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题