1) 瞬时状态Transient
1> 和数据库记录没有关系,和session没有关系
2> 来源:new出来的对象就是瞬时状态(因为也就是在内存中,和数据库没关系,所以瞬间就没了)
3> 转化为持久化状态:save、saveOrUpdate
4> 说明:对瞬时状态的对象进行任何操作都不会影响数据库
2)持久化状态Persistent
1> 和数据库记录有关系,和session有关系
2> 来源:瞬时状态对象通过save,或者执行查询(如get、load等)
3> 说明:对持久化状态的对象进行操作,Hibernate都可以自动检测到,然后通过sql语句影响到数据库中记录
4> 例子
I. 修改例子:
User user = new User();
user.setName("sky");
session.save(user);
user.setName("moon");
结果为:
Hibernate: insert into t_user (name) values (?)
Hibernate: update t_user set name=? where id=?
数据库中显示的名字为moon
说明对持久化状态对象进行操作都可以影响到数据库中记录
II. 生成id例子
User user = new User();
user.setName("sky");
System.out.println(user.getId());
session.save(user);
System.out.println(user.getId());
结果为:
0
Hibernate: insert into t_user (name) values (?)
12
可以看出:持久化状态的对象都是有id的III. 执行时机例子
User user = new User();
user.setName("sky");
System.out.println("--------");
session.save(user);
System.out.println("-----------");
结果为:
--------
Hibernate: insert into t_user (name) values (?)
-----------
可以看出:执行save方法后,就立即执行sql更新数据库,而不是等待commit的时候再一次执行(因为要生成id)3)游离状态Detached
1> 和数据库中记录有关系,和session没有关系
2> 来源:session通过关闭或者剔除操作,将持久状态对象从session中剔除出来(close,clear,evict)
3> 说明:因为和session无关了,对游离状态对象的操作不能影响数据库中的记录
4) 删除状态
1> 和数据库中记录无关系,和session有关系
2> 来源,session通过delete方法从数据库中删除对象之后对象的状态