在大多数hibernate应用程序中,我看到显式更新语句来更新db中的任何hibernate实体
Session session1 = factory.openSession();
Transaction tx1 = session1.beginTransaction();
College college= (College)session1.get(College.class, 1);
college.setCollegeName("College_update");
session1.saveOrUpdate(college); // at line 1
tx1.commit();
session1.close();
但即使我错过了声明1,实体也会在DB中更新。我的问题是提及显式更新声明是一个好习惯 什么时候不需要?
答案 0 :(得分:2)
不,不需要saveOrUpdate语句。 College实体附加到您的Hibernate会话,因为它是由Hibernate实例化的。当刷新该会话时,College实体的任何突变都将更新到数据库。
当您需要将现有(分离的)实体附加到休眠会话时,请使用saveOrUpdate。该会话范围内对该实体的任何后续突变都将被保留。
答案 1 :(得分:0)
需要更新才能从一个会话或事务中获取数据,并将其保存到另一个事务中的数据库中。
A a = session1.load(......);
// Commit transaction
//Start New session ......
//Start transaction
session2.update (a);
如果您读取实体在同一会话中更改其属性,则在刷新会话时将保存结果。