Hibernate对象的状态

来源:互联网 发布:ar应用是什么软件 编辑:程序博客网 时间:2024/05/03 08:42

不同的书上有不同的状态叫法,我就按照好记的习惯来说一下,一共三种状态,第一是临时状态对象,第二种托管状态(持久化状态),第三种脱管状态。
session.save()
当执行此方法的时候,Hibernate并没有生成sql语句对数据库进行操作,只是把数据从内存中的函数区域转到了Hibernate的内存区域,这是在内存中的操作,不涉及外存数据库操作,只有当执行transaction.commmit()方法的时候才会对数据可操作。同时,session.save()方法视主键生成机制影响。
session.open()是打开数据库的连接。session.close()只是断开hibernate和数据库的连接。
session.update()方法可以将一个对象的状态变成持久化状态。
当执行session.get()方法的时候
快照机制:Hibernate第一次把一个对象转换为持久化对象的时候。克隆一个快照给控制台,在提交的时候会对照快照看一下有没有发生变化,如果发生变化才执行update语句。
当一个对象是一个持久化对象的时候,当进行提交的时候,hibernate内部会让该对象和快照进行对比,如果一样,则不发出update语句,如果不一样,则发出update语句,可谓hibernate经典之作。
增删改必须要开启事物transaction
session.clear()把session中所有的对象清空。
session.update把对象从脱管状态转换成持久化状态。
session.evict()把一个对象从session中清空,有参数。
一个对象是否是持久化是针对某一个session而言的。
当执行transaction.commit的时候,hibernate内部会检查session
1,如果一个对象为临时状态对象,则session不会管。
2,如果一个对象是持久化状态对象,如果有ID值,并且和数据库对应,那么先把该对象与快照进行对比,如果一致,则什么都不做,如果不一致,则执行update语句。
3,如果一个对象是持久化状态对象,如果没有ID值,则会发出save语句。
一个session对应一个事物
这里写图片描述

0 0
原创粉丝点击