一个实例对象Person()在HIbernate数据库操作中有三种状态分别为:临时状态,持久化状态,托管状态
1.临时状态:Person()对象的调用,赋值等操作,Person存在内存中
2.持久化状态:person()经过session类的方法操作,把person()从内存中转移到得了hibernate内部的session中
在Hibernate中session对象操作时会对照Person()的快照文件(副本)。
情况1: Person person = (Person)session.get(Person.class, 1);
person.setName("中文");
person.setSex("还是女");
session.save();
transaction.commit();
session.close();
代码中session.save()是无用代码,session是将Person()转到session中,但是Person()对象本身就是在 Hibernate中的session取出来的,已经是在session中,所以可以直接省略
情况2:
Person person = new Person();
person.setId(1);
person.setName("王五");
person.setSex("女");
session.update(person);
transaction.commit();
session.close();
在代码中session.update方法是有运行的,因为前四行person对象都处于临时状态,session.update()将person()转换到session中,在转换的过程中,通过核对快照文件(副本)对照改id的属性是否有修改,如果有便实行修改,如果没有则只转移不操作
情况3:
Person person = new Person();
person.setName("王五");
person.setSex("女");
person.setId(1);
session.save(person);
transaction.commit();
session.close();
在代码中session.save()方法是有运行的, 和上面一样,session.update()将person()转换到session中,在转换的过程中,会核对快照文件(副本),如果1.id有重复,则只转移不操作,如果有,则添加信息
3.托管状态:person()通过数据库操作将数据存入数据库,并且断开与数据库的连接
除了查询数据库中id的最大值得sql代码外,所有的sql代码是运行transaction类时候产生的
4.当session.close()方法执行,session将关闭,如果再次openSession打开session,这个则为全新的session,也就是说之前session中的page()也将关闭,Page()对象的状态时临时状态