在这种情况下标识符值的含义?

时间:2016-09-19 19:04:27

标签: hibernate

关于瞬态对象的Hibernate doc: - 它在数据库中没有持久表示,并且已经分配了没有标识符值
这里标识符值的确切含义是什么?

1 个答案:

答案 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.