使用Hibernate进行对象关系映射 - “Sessionbound”是什么意思?

时间:2012-05-20 19:44:35

标签: java hibernate

我目前正试图采用Hibernate的第一步,但遗憾的是我并没有真正得到“sessionbound”的含义。

假设我有一个瞬态对象。一旦它变得持久,它不仅具有ID,而且还是“会话绑定”。但为什么值得一提?

2 个答案:

答案 0 :(得分:4)

Hibernate中的会话与事务密切相关,并且还充当第一级缓存。每次读取或存储对象时,它都会自动绑定到当前会话(因此放在L1缓存中)。

最重要的是,只要对象绑定到会话:

  • 你可以利用懒惰的关系加载(否则你会得到可怕的LazyInitializationException)。

  • 此时此对象的所有更改都将自动填充到基础数据库。只要对象绑定到会话,就不需要手动持久化。

答案 1 :(得分:1)

另外请记住,当使用像春天那样的交易管理层时,您的会话通常会在您的最外层交易进行评估时消失:

public class MyRep implements Rep {
   @Transactional
   public MyObject findMyObject(..) { ... }
}

因此,当您在spring中激活事务管理时,假设您尚未处理事务,那么如果您执行此操作:

MyObject o = rep.findMyObject(...);

当此方法完成时,您的对象不再绑定到会话(因为spring已关闭您的会话)。有办法克服这个问题,但我不会在这里讨论,只是想让你知道。