休眠:更新和合并方法之间的区别

时间:2018-12-30 10:25:34

标签: hibernate

我有下面的代码,显示了休眠的更新和合并方法之间的区别。但是我仍然不明白为什么我们在这里需要13号线。如果我们不编写第13行,则可以在第17行的位置调用session2.update(s1)

SessionFactory factory = cfg.buildSessionFactory();  //line no#1
Session session1 = factory.openSession();            //line no#2
                                                     //line no#3
Student s1 = null;                                   //line no#4
Object o = session1.get(Student.class, new Integer(101)); //line no#5
s1 = (Student)o;                                     //line no#6
session1.close();                                   //line no#7
                                                    //line no#8
s1.setMarks(97);                                    //line no#9
                                                    //line no#10
Session session2 = factory.openSession();           //line no#11
Student s2 = null;                                  //line no#12
Object o1 = session2.get(Student.class, new Integer(101)); //line no#13
s2 = (Student)o1;                                   //line no#14
Transaction tx=session2.beginTransaction();         //line no#15
                                                    //line no#16
session2.merge(s1);                                 //line no#17

1 个答案:

答案 0 :(得分:0)

要了解差异,您首先需要了解休眠中的持久对象,以下答案-What does persistence object means in Hibernate architecture?

中对此进行了说明

简单来说,Persistent objects是您创建的POJO类的实例,它们表示数据库中表中的行。 现在回到mergeupdate-

update方法用给定的分离实例的标识符更新持久实例。如果存在具有相同标识符的持久实例,则会引发异常。

while merge方法将给定对象的状态复制到具有相同标识符的持久对象上。如果当前没有与该会话关联的持久性实例,则将其加载。返回持久实例。如果给定的实例未保存,请保存的副本并将其作为新的持久实例返回。