hibernate中session的save,delete方法问题

fhqlpgk1218 2010-12-16 02:19:21
public class HibernateCoreAPITest {
public static SessionFactory sf;

@BeforeClass
public static void beforeClass(){
sf = new AnnotationConfiguration().configure().buildSessionFactory();
}
@AfterClass
public static void afterClass(){
sf.close();
}

@Test
public void testTeacherSave(){
Teacher t = new Teacher();
t.setName("t1");
t.setTitle("middle");
t.setMyWifeName("liang");
t.setBirthDate(new Date());

//Session session = sf.openSession();
Session session = sf.getCurrentSession();
session.beginTransaction();
session.save(t);
session.getTransaction().commit(); }

@Test
public void testSave2(){
Teacher t = new Teacher();
t.setName("t3");
t.setTitle("middle");
t.setBirthDate(new Date());

Session session = sf.getCurrentSession();
session.beginTransaction();
session.save(t);
System.out.println(t.getId());
session.getTransaction().commit();
System.out.println(t.getId());
}
@Test
public void testDelete(){
Teacher t = new Teacher();
t.setName("t1");
t.setTitle("middle");
t.setBirthDate(new Date());

Session session = sf.getCurrentSession();
session.beginTransaction();
session.save(t);
System.out.println(t.getId());
session.getTransaction().commit();

Session session2 = sf.getCurrentSession();
session2.beginTransaction();
System.out.println(t.getId());
session2.delete(t);
session2.getTransaction().commit();
}

自学hibernate过程中,学习session的save,delete,load等方法,测试代码如上面所示,用Junit单独运行testsave()方法,运行正常,查看数据库对应表有一行数据;单独运行testsave2(),运行正常,查看数据库对应表也是一行数据,只是testsave2的数据替换了testsave的数据;屏蔽testdelete();运行整个程序,运行正常,查看数据库表有2行数据,分别是testsave()和testsave2()的数据;恢复testdelete(),Junit单独运行testdelete(),正常运行,查看数据库表,表为空。如果整个程序运行,即testsave()、testsave2()、testdelete()一起运行,运行正常,查看数据库表,保持2行数据。
我想问,怎么testsave和testsave2分别单独运行,都是一行数据,后面运行的数据会替换原来save的数据,而不是直接增加数据,也就是2行数据;但如果一起运行,就能有2行数据???
还有,单独运行delete方法怎么一下子删除了2行数据,不是只删除一行数据么?还有,怎么3个方法一起运行,数据仍然是2行???
求高手解答上面的问题,最好能具体说明这些方法运行过程做了啥,为什么出现我上面的情况!!!
...全文
122 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
happingcn 2010-12-16
  • 打赏
  • 举报
回复
session.beginTransaction();

session.getTransaction().commit();

有问题 不是同一个事务

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧