您的位置:首页 > 其它

关于hibernate的一点见解

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

void
delete(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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: