我有下面的代码,显示了休眠的更新和合并方法之间的区别。但是我仍然不明白为什么我们在这里需要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
答案 0 :(得分:0)
要了解差异,您首先需要了解休眠中的持久对象,以下答案-What does persistence object means in Hibernate architecture?
中对此进行了说明简单来说,Persistent objects
是您创建的POJO类的实例,它们表示数据库中表中的行。
现在回到merge
和update
-
update
方法用给定的分离实例的标识符更新持久实例。如果存在具有相同标识符的持久实例,则会引发异常。
while merge
方法将给定对象的状态复制到具有相同标识符的持久对象上。如果当前没有与该会话关联的持久性实例,则将其加载。返回持久实例。如果给定的实例未保存,请保存的副本并将其作为新的持久实例返回。