繁体   English   中英

休眠会话范围

[英]hibernate session scope

@Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
 public Integer createUsers(final Collection<MyUser> myUsers) {
  final Session session = sessionFactory.getCurrentSession();
    for (final MyUser myUser : myUsers) {
      /*create auto id from db and asscoiate object with session    */
      session.save(myUser);
      myUser.setPassword("password");
    }
  return myUsers.size();
}

新密码将自动保存到db,因为会话关联了对象。 现在, 除非将对象实例从session中分离/移出,否则 在此方法/会话中对myUser所做的任何进一步更改都将保留到数据库中。

该方法完成后,事务将关闭,并且会话超出范围; 如果我从该方法返回MyUser对象,则该方法之外的任何其他更改(例如,控制器中的临时更改)都不会持久保存到数据库中(除非我当然与另一个会话和事务关联)?

一旦执行了此方法,事务将被提交(或回滚),并且会话将被刷新和关闭。 因此,正如您所说,每个User对象的密码值都设置为“ password”。

但是,一旦会话关闭,用户对象将处于分离状态(持久但未附加到活动会话)。

如果要保留任何进一步的更改,则必须调用session.update(user)将MyUser附加到新事务中的新会话上。

但是,如果从另一个Transactional方法调用此Transactional方法,则在该事务结束之前,不会分离MyUser对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM