Session接口中方法:
1. clear 清除Session缓存中的内容
2. close 关闭Session对象
3. contains 判断session内是否存在该持久化对象
4. delete 删除session中的持久化对象
5. evict 清除session缓存当中的一个持久化对象
6. get 获取一个持久化对象 如果数据库没有该对象则返回null
7. load 获取一个持久化对象 如果数据库没有该对象则产生ObjectNotFoundExce
ption异常,load查询出来的对象是一个延迟加载。
get和load方法可以不添加事务处理,查询都可以不进行事务处理的添加。
8. lock 获取一个带乐观锁的持久化对象
10. persist 保存一个对象到持久化,当无事务时,不执行sql语句,不提交对象到数据库中,有事务时与save方法相同。
11. save 保存一个对象到持久化,当无事务时,执行sql语句,对象插入数据库,然后又回滚出来。
12. saveOrUpdate 保存或者更新一个对象到持久化状态。
saveOrUpdate什么时候执行save?什么时候执行update呢?
当对象为瞬时状态时,执行save方法。
当对象为托管状态时执行update方法。
9. merge 更新一个脱管状态对象到脱管状态,它处理的对象总是脱管的。
13. update 更新一个脱管状态对象到持久化状态。
对象什么情况下为持久化状态呢?
1. 对象在数据库中有与之相对应的记录,如果数据库中无记录就是瞬时态。
2. 对象与Session相关联,当调用对象转入到持久态的方法时,并且在事务提交之前。
持久化状态当中的对象,当发生值的改变时,数据库能检测到,即修改数据库内的数据。
当对象从持久化状态出来后,即成为脱管状态或者游离状态。
对象什么情况下位脱管状态或游离状态?
1. 对象与Session之间没有关联,表示session调用evict,close,clear方法后就表示与对象无关联。
2. 对象主键必须有值;如果主键为Integer类型,大于0表示有值,小于等于0表示无主键值;如果主键为String类型,无主键值那么为null,其他的就表示有主键。 那么对象无主键值就表示它是一个瞬时状态。