我使用了回滚,但却没有回滚,这是怎么回事下面是测试的代码 User和Group是双向一对多的关系。
@Test
public void test(){
Session session =sessionFactory.getCurrentSession();
session.beginTransaction();
User u1=new User();
User u2=new User();
Group g=new Group();
g.setName("编程爱好小组");
u1.setName("小明");
u2.setName("小强");
u1.setGroup(g);
u2.setGroup(g);
session.save(u1);
session.save(u2);
session.getTransaction().rollback();
Session session2=sessionFactory.getCurrentSession();
session2.beginTransaction();
User u=(User)session2.get(User.class, 1);
u.setName("小小");
u.setName("笑笑");
session2.getTransaction().commit();
   }
}
控制台输出
18:57:40,931  INFO org.hibernate.tool.hbm2ddl.SchemaExport:226 - Running hbm2ddl schema export
18:57:40,937 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:242 - import file not found: /import.sql
18:57:40,938  INFO org.hibernate.tool.hbm2ddl.SchemaExport:251 - exporting generated schema to database
18:57:40,940 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 
    alter table _user 
        drop 
        foreign key FK571A4AAD22302D4
18:57:40,997 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 
    drop table if exists _group
18:57:41,002 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 
    drop table if exists _user
18:57:41,007 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 
    create table _group (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
18:57:41,112 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 
    create table _user (
        id integer not null auto_increment,
        name varchar(255),
        group_id integer,
        primary key (id)
    )
18:57:41,224 DEBUG org.hibernate.tool.hbm2ddl.SchemaExport:377 - 
    alter table _user 
        add index FK571A4AAD22302D4 (group_id), 
        add constraint FK571A4AAD22302D4 
        foreign key (group_id) 
        references _group (id)
18:57:41,329  INFO org.hibernate.tool.hbm2ddl.SchemaExport:268 - schema export complete
Hibernate: 
    insert 
    into
        _group
        (name) 
    values
        (?)
Hibernate: 
    insert 
    into
        _user
        (group_id, name) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        _user
        (group_id, name) 
    values
        (?, ?)
Hibernate: 
    select
        user0_.id as id1_1_,
        user0_.group_id as group3_1_1_,
        user0_.name as name1_1_,
        group1_.id as id0_0_,
        group1_.name as name0_0_ 
    from
        _user user0_ 
    left outer join
        _group group1_ 
            on user0_.group_id=group1_.id 
    where
        user0_.id=?
Hibernate: 
    update
        _user 
    set
        group_id=?,
        name=? 
    where
        id=?

解决方案 »

  1.   

    一般的回滚是在try语句里出现了异常类的信息才去回滚的。
      

  2.   

    我知道一般是在catch语句中才会滚的,这里只是测试,强制回滚
      

  3.   

    既然是双向关联  -  楼主是不是只设置了单向啊  应该还要加上: group.setuser(u1)  group.setuser(u2)吧
      

  4.   

    加不加关系不大,都能成功保存。只是还是没法回滚
    g.getUsers().add(u1);
    g.getUsers().add(u2);
      

  5.   

    谁来帮忙解决一下啊,映射用的是Annotation
      

  6.   

    package com.xuz.hibernate.dao;import org.hibernate.Session;
    import org.hibernate.Transaction;import com.xuz.hibernate.base.HibernateSessionFactory;
    import com.xuz.hibernate.vo.Students;public class RollbackTest { public static void main(String[] args) {
    Session session = HibernateSessionFactory.getSession();
    Transaction tran = session.beginTransaction();
    try {
    Students mating = new Students(2L, "mtt", 27);
    session.save(mating);
    tran.rollback();
    session.flush();
    System.out.println("insert success!");
    } catch (Exception e) {
    // tran.rollback();
    e.printStackTrace();
    } finally {
    HibernateSessionFactory.closeSession();
    }

    }}
    我试了 可以啊。
      

  7.   

    Session session = HibernateSessionFactory.getSession();
    而不是
    Session session =sessionFactory.getCurrentSession();
    你这样两个指向同一个session  到最后还是提交了你debug一下就可以看出来了
      

  8.   

    楼主是不是使用Spring托管了事务?这样的话,手动回滚无效。
      

  9.   

    ....
    session.getTransaction().rollback();
    //这里估计少做了些事情吧,
    Session session2=sessionFactory.getCurrentSession();
    ....
    看上去第一个session 的事务没有提交
      

  10.   

    楼主,session1 的commit()在哪里?
      

  11.   

    try{
        
       }catch(){
       //回滚
       }
      

  12.   

    没有使用,只是用了annotation了
      

  13.   

    以前就debug过。又测试了一遍。两个Session不一样
      

  14.   


    @Test
    public void testRollBack()
    {
    Session s=sessionFactory.openSession();
    s.beginTransaction().begin();
    try{
    for(int i=0;i<10;i++)
     {
    Bird b=new Bird();
    b.setName("bird"+i);
    s.save(b);
    if(i==2)
    {
    throw new RuntimeException();

    }
     }
    s.getTransaction().commit();
    }
    catch(Exception e){
    s.getTransaction().rollback();
    e.printStackTrace();
    }
    finally{
    s.close();
    }
    //
    }这种也没法回滚。到底是怎么回事啊。高手指教啊
      

  15.   

    function mod(characterId){
    document.forms[0].action=window.showModalDialog("character_characterModInit.do?characterId="+characterId,"","status:no;dialogWidth=600px;dialogHeight=500px");
    }
    运行出现未结束的字符串常量,是怎么回事?