提交后hibernate对象处于什么状态?

时间:2016-02-14 19:24:28

标签: java hibernate session

完成本教程

“会话结束后,持久性对象设置为分离对象”

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

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();
}

2 个答案:

答案 0 :(得分:1)

实体处于managed州。

chart

答案 1 :(得分:0)

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

也就是说,如果您在关闭会话或驱逐会话的托管对象之前创建了一个额外的事务,该实体将继续由会话进行管理和跟踪。这意味着您可以继续在后续事务中继续使用事务1中保存的实体,因为只要您的后续事务使用相同的Hibernate会话,它仍然可以被管理。