1.瞬时对象(transientObjects):由我们自己创建出来,数据库中没有相应的记录,也没有被hibernate的Session管理起来,这样的对象可以被jvm回收的。
2.持久化对象(persistentObjects)这个对象在数据库中有相应的记录,这个对象被Session管理起来。
3.脱管对象(detachObjects):数据库中有相应的记录,但是没有被Session管理
1.瞬时对象转换成持久对象
对持久对象的修改
2.持久对象和脱管对象的转换
public class TestHibernate {
@Test
public void test1(){
//创建session
Session session = HibernateUtils.getSession();
//开启事物
Transaction tx = session.beginTransaction();
User user = new User();
try {
user.setUserId(1);
user.setUname("zhangyan");
user.setGender(1);
user.setBirthday(new Date());
session.save(user);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
//Session关闭,那么user由持久对象变成脱管对象,在创建session也无法改变值
HibernateUtils.closeSession(session);
}
Session session1 = HibernateUtils.getSession();
Transaction tx1 = session1.beginTransaction();
try{
user.setUname("zhang");
//Session1接纳了user,立即把user变成持久对象
session1.update(user);
//一提交就会发出update的sql
tx1.commit();
} catch (Exception e) {
e.printStackTrace();
tx1.rollback();
}finally{
HibernateUtils.closeResource(session1);
}
}
3.通过get和load和iterator查询出来的对象是持久状态
查询不需要开启事物,在这里我们提供toString方法打印user。
5代表数据库的第5条数据
如何证明get发出来的是持久对象呢?
可以在写user.setUname("xxx");发出update语句,证明是持久对象。
4.持久和脱管对象转换瞬时delete()
通过delete把数据库中的数据删除,而且清掉Session中的对象,那么这个对象就变成了瞬时对象
提交的时候才会发出delete的sql