【问题标题】:What state is hibernate object in after commit?提交后休眠对象处于什么状态?
【发布时间】:2016-02-14 19:24:27
【问题描述】:

阅读本教程

“一旦会话结束,持久化对象设置为分离对象”

我的问题是,如果您在第一次提交之后但在关闭会话之前开始另一个事务会发生什么。此时用户对象处于什么状态?

public static void main(String[] args) {
    System.out.println("Maven + Hibernate + Oracle"); 
    Session session = HibernateUtil.getSessionFactory().openSession();   
    session.beginTransaction();
    DBUser user = new DBUser(); //creating transient object
    user.setUserId(104); 
    user.setUsername("user1");
    user.setCreatedBy("system");
    user.setCreatedDate(new Date());  
    session.saveOrUpdate(user);  //Updating the transient object to persistence object
    session.getTransaction().commit(); 

    session.beginTransaction();
    user.setUsername("user2"); //what state is user object in right now?
    session.saveOrUpdate(user);
    session.getTransaction().commit();
    session.close();
}

【问题讨论】:

  • 如果您仍然在同一个Session 中,则该对象仍应附加。
  • 对不起,我不熟悉“附加”。这和瞬态是一样的吗?
  • 它仍然会附加

标签: java hibernate session


【解决方案1】:

实体处于managed 状态。

【讨论】:

    【解决方案2】:

    一旦实体被附加到关联的 Hibernate Session,它将一直是托管对象,直到从 Hibernate Session 缓存中逐出实例或关闭会话。

    也就是说,如果您在关闭会话或逐出会话的托管对象之前创建附加事务,则该实体将继续由会话管理和跟踪。这意味着您可以在后续事务中继续使用事务 1 中保存的实体而不会出现问题,因为只要您的后续事务使用相同的 Hibernate 会话,它仍处于受管理状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 2015-04-25
      • 2012-09-06
      相关资源
      最近更新 更多