我目前正试图采用Hibernate的第一步,但遗憾的是我并没有真正得到“sessionbound”的含义。
假设我有一个瞬态对象。一旦它变得持久,它不仅具有ID,而且还是“会话绑定”。但为什么值得一提?
答案 0 :(得分:4)
Hibernate中的会话与事务密切相关,并且还充当第一级缓存。每次读取或存储对象时,它都会自动绑定到当前会话(因此放在L1缓存中)。
最重要的是,只要对象绑定到会话:
你可以利用懒惰的关系加载(否则你会得到可怕的LazyInitializationException
)。
此时此对象的所有更改都将自动填充到基础数据库。只要对象绑定到会话,就不需要手动持久化。
答案 1 :(得分:1)
另外请记住,当使用像春天那样的交易管理层时,您的会话通常会在您的最外层交易进行评估时消失:
public class MyRep implements Rep {
@Transactional
public MyObject findMyObject(..) { ... }
}
因此,当您在spring中激活事务管理时,假设您尚未处理事务,那么如果您执行此操作:
MyObject o = rep.findMyObject(...);
当此方法完成时,您的对象不再绑定到会话(因为spring已关闭您的会话)。有办法克服这个问题,但我不会在这里讨论,只是想让你知道。