hibernate 中session的总结

来源:互联网 发布:打马赛克软件 编辑:程序博客网 时间:2024/05/18 02:15

      session具有缓存,每一个持久化状态的对象都被纳入到session的缓存中。不同session的缓存空间是不一样的。数据库中的一条记录在一个session中只能对应一个对象,不同的session可以有不同的对象对应数据库中的同一条记录。session缓存清理时会调用session.flush方法,在三种情况下会调用该方法:1.在执行事务提交时,如果flush模式不为NEVER,commit()将调用flush;2.在某些查询语句之前(防止查到的数据不是最新的);3.在程序强制调用session.flush时。

      hibernate中对象有三种状态:临时、持久和脱管状态。对于new的对象处于临时状态;通过save或saveOrUpdate方法持久化的对象或者查找出来的对象处于持久状态;session关闭后对象处于脱管状态。

     区分对象可以根据内存地址或者对象携带的信息。以内存地址为依据时,使用“==”;以对象携带信息为依据时,使用Object.equals(Object anotherObject)方法。

     对象关联关系有一对一、多对一、一对多和多对多,其中多对一和一对多方法比较常见。一对一关系有两种方式:以主键关联和一外键关联。一对多和多对一通常应设置为双向关联,并在“一”这一方设置inverse=“true”(比如一个班级对应多个学生,在班级这一边设置inverse=“true”)。多对多需要第三张表来保存两个实体间的关系。

     Hibernate检索策略有立即检索、延迟检索、预先抓取、批量立即检索和批量延迟检索。对于末端为“一”(一对一和多对一)的关联,一般设置为预先抓取,对于末端为“多”(一对多和多对多)的关联,设置为延迟检索。

     按照检索策略的优先权,按从大到小排序入下:HQL>预先抓取>立即或延迟。HQL语句将忽略第一层的预先抓取,但延迟检索的配置对HQL的检索仍有影响;附属层始终采取配置未见设置的检索策略。

原创粉丝点击