瞬态:
由new操作符创建,且尚未与Hibernate Session关联的对象被认定为瞬时的。瞬时对象和数据库的记录没有任何联系,因而也不会被赋予持久化标识。在应用程序中,如果没有保持对瞬时对象的引用,它会被垃圾回收器销毁。
持久态:
一旦一个处于瞬时状态的对象和session相关联,它就转换为持久态。持久的实例在数据库中有对应的记录,并拥有一个持久化标识。在与该session断开连接之前,Hibernate会检测到处于持久状态的对象的任何改动,并且在当前操作单元执行完毕时将对象中的数据与数据库的相关记录同步。
游离态:
一旦与持久对象关联的session被关闭后,对象就变为脱管的。在托管期间,该对象可继续被修改。如果脱管对象被重新关联到某个session上,会再次转变为持久的,这时在脱管期间的任何改动都会被保存到数据库中。
1,使对象持久化。
2,装载对象。
load():如果知道一个对象的ID,则就可以用session的load()方法来获取它。load()的另一个参数是指定类的class对象。该方法会创建指定类的持久化实例,并从数据库加载其数据。
User user = (User) session.load(User.class, userId);
get():使用load()方法装载某个对象,如果在数据库中该记录不存在,则会抛出一个异常。如果程序员不确定要装载的记录是否存在,可以使用get()。
User user = (User) session.get(User.class, userId);//如果在数据库中没有对应的记录,则get()方法返回null
3,查询。
4,修改持久对象。
5,修改脱管对象。
6,使用saveOrUpdate()方法。
7,删除持久对象。
删除持久对象,可以把该对象对应的记录从数据库中删除,但是程序中仍然可以引用该对象。所以可以这样理解:删除一个对象就是把该对象由持久状态转变为瞬时状态,用Session.delete()方法进行删除操作。