hibernate持久化对象的状态

来源:互联网 发布:中国电信网络传真 编辑:程序博客网 时间:2024/06/17 04:14
hibernate持久化对象的状态分类:transient 瞬时态、persistent持久态、detached脱管态

临时状态: 是指对象的数据没有在数据库中保存,对象本身没有在session的缓存管理之中,一般就是对象刚new出来的时候。
持久状态: 是指对象的数据已经在数据库中保存,对象本身也在session的缓存管理之中。
游离状态: 是指对象的数据已经在数据库中保存,但是对象不在session的缓存管理之中。

关系状态换图如下:




 你可能会听说有 删除态(第四中状态):给delete专门定义一个状态。

对应的关系状态换图如下:



下面是演示代码:

public class UserTest {@Testpublic void testSave() {// 创建一个读取主配置文件的对象Configuration cfg = new Configuration();// 读取主配置文件cfg.configure();// 创建Session工厂SessionFactory factory = cfg.buildSessionFactory();// 打开Session// session = factory.openSession();// 如果在主配置文件将session绑定到线程中,所以可以从线程中取出sessionSession session = factory.getCurrentSession();// 开启事务session.beginTransaction();User user = new User();// 此时对象属于临时状态(对象刚刚new出来)user.setUname("孙行者");// 临时状态session.save(user);// 持久化状态// Save() 方法将瞬时对象保存到数据库,对象的临时状态将变为持久化状态。对一个已经持久的对象调用 save()或 update()// 方法是没有意义的。user.setUname("小白");session.save(user);// 无效session.update(user);// 无效session.clear();// session调用clear方法将缓存清空,对象就不在缓存中,游离状态System.out.println(user.getUname());// user对象处于游离状态// 提交事务session.getTransaction().commit();// 关闭sessionsession.close();}@Testpublic void testUpdate() {Configuration cfg = new Configuration();cfg.configure();SessionFactory factory = cfg.buildSessionFactory();Session session = factory.getCurrentSession();// 开启事务session.beginTransaction();User user = session.get(User.class, 1);// 此时对象的状态--持久状态user.setUname("王五");// 由于对象的状态并没有发生改变(持久态)所以对象必然位于 Session 缓冲中,对 user对象所做的变更将 被同步到数据库中。所以// update() 是没有意义的,可以省略// 提交事务session.getTransaction().commit();// 关闭sessionsession.close();}}


原创粉丝点击