在Hibernate中,对象有以下3种状态:
- 瞬时状态(Transient):
- 对象刚被创建,但尚未关联到Hibernate会话。
- 例如:
Account account = new Account(); // 对象处于瞬时状态
- 持久状态(Persistent):
- 对象已经关联到Hibernate会话,并且已被插入到数据库中。
- 例如:
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Account account = new Account();
session.save(account); // 对象转为持久状态
tx.commit();
- 脱管状态(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工作的基石。要妥善管理对象状态,关键是要理解会话的作用与对象关联的时机。