关于hibernate的一点见解

来源:互联网 发布:java 使用redis教程 编辑:程序博客网 时间:2024/05/05 19:54

用了hibernate开发项目已经很久了,尤其是delete(Object obj)方法,我个人一直认为delete只能删除persist状态的对象,正如api所说:

voiddelete(Object object)
          Remove a persistent instance from the datastore.

不过今天我无意之中,使用了如下的代码:

@Test
 public void testTeacher() throws Exception {
  Session session = sessionFactory.openSession();
  Teacher t = new Teacher();
  t.setUsername("zcl");
  
  session.beginTransaction().begin();
  session.save(t);
  session.getTransaction().commit();
  session.close();
  //此时session已经关闭,t对象已经成了脱管状态。
  Session session1 = sessionFactory.openSession();
  session1.beginTransaction().begin();
  session1.delete(t); //依然删除成功!
  session1.getTransaction().commit();
  session1.close();
  
 }

我就纳闷了,怎么能删除一个脱管状态的对象呢!

于是我又测试了如下代码:

@Test
 public void testTeacher1() throws Exception {
  Session session = sessionFactory.openSession();
  Teacher t = new Teacher();
  t.setId(13); //这个id为13在数据库中有对应的记录
  
  session.beginTransaction().begin();
  session.delete(t); //发现依然执行成功
  session.getTransaction().commit();
  session.close();
  
 }
于是我觉得hibernate对delete(Object o)的说明显示是bug.

应该这样:只要数据库有对应的id,则删除成功!

附:我使用的是hibernate3.3.2 + jpa.

 

 

原创粉丝点击