浏览 2106 次
锁定老帖子 主题:脱管和瞬态-名异实同
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-20
先看列子: Preson 主键id,而且在数据库自动生成策略。其他字段均可为空,本次讨论中使用firstname字段修改。 xml配置均使用hibernate默认配置,参数均无修改。 1.正常由transient->persistent public void test1(){ Person p = new Person();//transient p.setFirstname("harrison"); Session session = SessionFactory.getSession(); session.beginTransaction(); session.save(p);//Persistent session.getTransaction().commit(); session.close(); } console Hibernate: insert into Person (age, firstname, lastname) values (?, ?, ?) 数据库保存ok 2.正常由persistent->detached->persistent,修改刚插入的数据 public void test2(){ Session session = SessionFactory.getSession(); session.beginTransaction(); Person p = (Person)session.get(Person.class, 1L);//Persistent session.getTransaction().commit(); session.close(); p.setFirstname("second");//Detached session = SessionFactory.getSession(); session.beginTransaction(); session.update(p);//Persistent again session.getTransaction().commit(); session.close(); } console: Hibernate: select person0_.PERSON_ID as PERSON1_2_0_, person0_.age as age2_0_, person0_.firstname as firstname2_0_, person0_.lastname as lastname2_0_ from Person person0_ where person0_.PERSON_ID=? Hibernate: update Person set age=?, firstname=?, lastname=? where PERSON_ID=? 数据库更新ok 3.把transient当作detached用 public void test3(){ Person p = new Person();//transient p.setId(1L); p.setFirstname("third"); Session session = SessionFactory.getSession(); session.beginTransaction(); session.update(p);//Persistent session.getTransaction().commit(); session.close(); } console: Hibernate: update Person set age=?, firstname=?, lastname=? where PERSON_ID=? 数据库更新成功 相信大家也看明白了,脱管状态的object,再次重新连接session和transient状态的对象没有区别,他们都是游离的状态,和session没有关系了,他们的区别是在业务的逻辑上,与存在的道理是没有区别的。 如果由兴趣的朋友可以继续研究下,当new 一个person是在数据库主键相同的对象,hibernate虽然执行了insert语句,但是并没有成功,也没有异常,同样把datached状态的对象修改以后,如果不用update而使用insert方法,也就是把这个object当作transient来处理的时候,hiberntae也同样执行了insert语句,但是数据库也没有发生变化,也没有异常。如此可见,transient和detanched的存在方式是相同的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |