是否需要在hibernate中进行显式更新?

时间:2015-04-18 13:41:58

标签: java hibernate

在大多数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中更新。我的问题是提及显式更新声明是一个好习惯 什么时候不需要?

2 个答案:

答案 0 :(得分:2)

不,不需要saveOrUpdate语句。 College实体附加到您的Hibernate会话,因为它是由Hibernate实例化的。当刷新该会话时,College实体的任何突变都将更新到数据库。

当您需要将现有(分离的)实体附加到休眠会话时,请使用saveOrUpdate。该会话范围内对该实体的任何后续突变都将被保留。

答案 1 :(得分:0)

需要更新才能从一个会话或事务中获取数据,并将其保存到另一个事务中的数据库中。

 A a = session1.load(......);
 // Commit transaction

//Start New session ......

 //Start transaction
 session2.update (a);

如果您读取实体在同一会话中更改其属性,则在刷新会话时将保存结果。