我使用了回滚,但却没有回滚,这是怎么回事下面是测试的代码 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=?
@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=?
g.getUsers().add(u1);
g.getUsers().add(u2);
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();
}
}}
我试了 可以啊。
而不是
Session session =sessionFactory.getCurrentSession();
你这样两个指向同一个session 到最后还是提交了你debug一下就可以看出来了
session.getTransaction().rollback();
//这里估计少做了些事情吧,
Session session2=sessionFactory.getCurrentSession();
....
看上去第一个session 的事务没有提交
}catch(){
//回滚
}
@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();
}
//
}这种也没法回滚。到底是怎么回事啊。高手指教啊
document.forms[0].action=window.showModalDialog("character_characterModInit.do?characterId="+characterId,"","status:no;dialogWidth=600px;dialogHeight=500px");
}
运行出现未结束的字符串常量,是怎么回事?