关于瞬态对象的Hibernate doc: - 它在数据库中没有持久表示,并且已经分配了没有标识符值。
这里标识符值的确切含义是什么?
答案 0 :(得分:0)
在休眠状态下有3个状态的对象(实例)。
瞬态:如果对象刚刚创建但没有主键(标识符)且与会话无关,则该对象处于暂时状态
因此,它在数据库中没有持久表示,并且没有分配标识符值(即,在与瞬态对象相关的数据库中没有任何操作(保存/更新))。
持久性:如果会话打开且您只是保存数据库中的实例或已检索,则对象处于持久状态来自数据库的实例。
已分离:如果会话已关闭,则对象处于分离状态。在分离状态之后,如果调用lock()或update()方法,对象将进入持久状态。
持久化实例在数据库中具有表示形式,标识符值并与会话相关联。 您可以通过将瞬态实例与会话相关联来使其成为永久实例。
以下代码描述了休眠中对象的所有3种状态:
Employee e1=new Employee();
e1.setName("Rohit");
Employee e2=new Employee();
e2.setName("Glenn");
//The above objects e1 & e2 are in transient state.
SessionFactory sessionFactory=HibernateUtil.getSessionAnnotationFactory();
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
session.persist(e1);
session.persist(e2);
//now, the objects e1 & e2 are in persistent state.
tx.commit();
session.close();
e1.setName("Mitchell");
e1.setName("Joe");
//now objects e1 & e2 are in detached state.