对象分为三种状态
1. 瞬时状体:没有id,没有在session中缓存
2. 持久状态:有id,在session缓存中
3. 游离|托管状态:有id,没有在session缓存中
三种状态的转换图
三种方法讲解
save方法
save方法是将对象瞬时状态转变为持久状态
根据主键生成策略
如果为identity方式,则先执行insert语句,得到oid执行对象的set方法设置oid,将对象放到session缓存中
如果为increment方式,则由先执行select max(oid) from customer,再加1,执行对象的set方法设置oid,将对象放到session缓存中,提交的时候执行insert方法
即便是游离状态的对象,调用save方法,同样会根据生成策略完成oid的设置,在放到session缓存中当作一个新的对象,提交的时候执行insert语句
也就是说提交的时候在数据库中执行什么语句,是根据session调用的save、update、delete决定的
update方法
update方法是将对象由游离状态转变为持久状态
1. 参数为瞬时状态的对象时,调用update会报错,程序会检查对象是否含有oid
2. 参数为游离状态的对象时,将对象放到sesion缓存中,提交的时候在数据库中执行update方法,
2.1 如果oid在数据库中不存在则不跟新任何内容,即放到sesion中时候只要对象有oid即可,至于在数据库中是否存在此oid则不做检查
2.2 如果oid在数据库中存在,则会更新数据库中此oid的数据内容
delete方法
1. 参数为瞬时状态时,调用delete会报错,程序会检测对象是否含有oid
2. 参数为游离状态时,将对象放到sesion缓存中,提交的时候在数据库中执行delete方法
2.1 如果oid在数据库中不存在不会删除任何数据,即放到session中的时候只要对象有oid即可,至于在数据库中是否存在此oid则不做检查
2.2 如果pid在数据库中存在,则会删除数据库中此oid的数据内容