Hibernate中的对象状态有哪些?各自的含义是什么?代码举例讲解

在Hibernate中,对象有以下3种状态:

  1. 瞬时状态(Transient):
  • 对象刚被创建,但尚未关联到Hibernate会话。
  • 例如:
Account account = new Account();   // 对象处于瞬时状态
  1. 持久状态(Persistent):
  • 对象已经关联到Hibernate会话,并且已被插入到数据库中。
  • 例如:
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Account account = new Account();
session.save(account);   // 对象转为持久状态
tx.commit();
  1. 脱管状态(Detached):
  • 对象曾经关联到Hibernate会话,但现已结束会话。
  • 例如:
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Account account = (Account) session.get(Account.class, 1); 
tx.commit();
session.close();   // 会话结束,对象转为脱管状态

对象状态之间的转变:

  • 瞬时状态 -> 持久状态:通过save()或saveOrUpdate()与会话关联
  • 持久状态 -> 瞬时状态:通过delete()与会话脱离
  • 持久状态 -> 脱管状态:会话结束
  • 脱管状态 -> 持久状态:通过merge()再与会话关联
    对象状态管理是Hibernate工作的基石。要妥善管理对象状态,关键是要理解会话的作用与对象关联的时机。