在jdbc中,一个dml语句会默认开启事务,执行成功后提交。如果是两个dml语句,如果不设置自动提交为false的话,会在执行过程中开启两个事务把?
还有,在hibernate中是对jdbc的封装,如果还是两个dml语句,那么应该是如果不开启事务的话,也能执行,但是第二条语句会提示nosession的错误,这是为什么?数据库不会默认给开启事务吗?
还有,spring对事务的管理,如果在一个方法上不开启事务,那么能不能正常执行?如果是两条dml语句有是怎么样?是不是不加事务就会默认像jdbc一样,第一个dml开启一个事务,第二个又开启一个?
我有点乱,希望有高手给我解答下,先谢谢了!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    在jdbc中,一个dml语句会默认开启事务,执行成功后提交。这个,要设置自动提交为true的时候才会,如果为false,需要手动commit。如果是两个dml语句,如果不设置自动提交为false的话,会在执行过程中开启两个事务把?这个,看你的程序是怎么写的,如果在一个线程里,提交第一个语句后,开启一个事务,执行成功,commit,然后再提交第二个语句,开启一个事务,执行成功,commit。如果是两个线程里,很可能是同时开两个事务。在hibernate中是对jdbc的封装,如果还是两个dml语句,那么应该是如果不开启事务的话,也能执行,但是第二条语句会提示nosession的错误,这是为什么?数据库不会默认给开启事务吗?
    你如果没有开启事务管理,hibernate会自动开启管理的,第二条报错,你得查查是什么原因......spring对事务的管理,如果在一个方法上不开启事务,那么能不能正常执行?如果是两条dml语句有是怎么样?是不是不加事务就会默认像jdbc一样,第一个dml开启一个事务,第二个又开启一个?
    spring 对事务的管理和hibernate一样的,只是实现方法不同.......
      

  2.   

    比如 insert into xxxx values(‘’,‘’);
    然后我又insert into xxxx value(‘’,‘’);
    默认情况下自动提交的把,这样的话 执行第一个insert into xxxx values(‘’,‘’)开启一个事务,执行成功自动提交。
    执行第二个insert into xxxx value(‘’,‘’)又开启事务,成功自动提交了。
    可是在hibernate中 如果默认的话就和jdbc的不一样。
    我想知道的是hibernate默认会怎样处理上面的情况,也是执行一个insert into 开启事务,然后成功后关闭吗,执行第二个再开启然后再关闭吗? 
    可现实好像是如果自己不控制,第二条语句会报一个session已经关闭的错误把?
      

  3.   

    +1
    其实很简单就能理解啊,只要没事务的情况下,那么只要执行一条dml语句就是一个事务。
      

  4.   

    “其实很简单就能理解啊,只要没事务的情况下,那么只要执行一条dml语句就是一个事务。”
    这个我是知道的,我只是困惑的是为什么hibernate在执行两个语句的时候,第二个就会报session已经关闭,它不会自己开启事务吗?
      

  5.   

    求大牛 解答我的 问题  上边两位说的对可是我就是想不明白hibernate为什么一定要手动的开关,如果默认情况下就会报session已经关闭,咋就不能像jdbc一样可以执行呢?
      

  6.   

    回复5楼
    事务和session是两个对象,当事务提交后session就关闭了。你描述的现象应该是在session关闭后仍然想使用这个session.解决办法:重新开session或者在一个事务中操作。
      

  7.   

    在hibernate中是对jdbc的封装,如果还是两个dml语句,那么应该是如果不开启事务的话,也能执行,但是第二条语句会提示nosession的错误,这是为什么?数据库不会默认给开启事务吗?
    ::在hiberante中的事物操作时有session对象完成的, 你说的nosession应该是你用session提交的, 而session提交完后会关闭。 你可以写一个过滤器, 在过滤器中将session对象绑定在线程。等所有事物都提交后在关闭。
    spring对事务的管理,如果在一个方法上不开启事务,那么能不能正常执行?如果是两条dml语句有是怎么样?是不是不加事务就会默认像jdbc一样,第一个dml开启一个事务,第二个又开启一个?
    ::在spring中,你可以生成hibernatemplate, 生成事物管理器对象, 并运用AOP切面添加事物的开启和提交