hibernate的三种状态:transient(临时)、persistent(持久)和detach(游离)。
transient:最初new出来的实体类bean的对象,没有经过其他操作,例save,saveOrUpdate。
例:User user = new User();
user.setId(1);
如果此时数据库没有Id为1 的数据,此时的状态就为transient。依次为例,通过save可以将transient状态转化为persistent状态。
例:session.save(user);
PS:这个地方和有一次在测试的时候,将save方法删除之后无法操作数据一样。
detach:与transient状态很像,不同的地方在于new出来的对象,通过set在数据库存在这么一条数据:
例:User user = new User();
user.setId(1);
在数据库表中存在一条Id为1的数据。
persistent:
transient->persistent:一般情况下,这种转换只有一种方式,使用save方法。至于saveOrUpdate这个方法实际上实现的也是save。
saveOrUpdate说明:如果存在当前Id的数据,执行update;否则执行save。
此时的persistent状态,在session.save(user)之后仅就可以实现update、load操作,而且load操作不存在SQL语句。
例:User user = new User();
user.setId(1);
user.setName(“111”);
session.save(user);
user=(User)session.load(User.class,u);
session.getTransaction.commit();
这个只会出现一条插入SQL,不会出现查询SQL。因为save方法只是将数据存入到缓存之中,还没有提交到数据库。个人感觉很有意思。
detach->persistent:这种转换方式,可以使用load、update。因为detach为离线状态,在数据库原本就是存在的,所以是不可以进行save操作的。
至于其他,通过图就可以看清楚。