标签:
Hibernate持久化对象的三种状态:瞬时对象(Transient Objects),持久化对象(Persist Objects),离线对象(Detached Objects)。
离线对象(Detached Objects):session关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,它们不再受hibernate管理。
持久化对象的三种状态是可以相互转化的,具体转换过程如图所示:
<strong><span style="font-size:18px;"><strong><span style="font-size:18px;">public void testSave1() {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction();
//Transient状态
User user = new User();
user.setName("zhangsan");
user.setPassword("123");
Date date=new Date();
SimpleDateFormat temp=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String date2=temp.format(date);
Date date3=temp.parse(date2);
user.setCreateTime(date3);
user.setExpireTime(date3);
//Persistent状态
//Persistent状态的对象,当对象的属性发生改变的时候
//hibernate在清理缓存(脏数据检查)的时候,会和数据库同步
session.save(user);
user.setName("lisi");
tx.commit();
}catch(Exception e) {
e.printStackTrace();
if (tx != null) {
tx.rollback();
}
}finally {
HibernateUtils.closeSession(session);
}
//detached状态
}</span></strong></span></strong>
<strong><span style="font-size:18px;"><strong><span style="font-size:18px;">Hibernate: insert into User (name, password, createTime, expireTime, id) values (?, ?, ?, ?, ?) Hibernate: update User set name=?, password=?, createTime=?, expireTime=? where id=?</span></strong></span></strong>
<strong><span style="font-size:18px;"> <strong><span style="font-size:18px;">public void testSave3() {
Session session = null;
Transaction tx = null;
User user = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction();
//Transient状态
user = new User();
user.setName("张三");
user.setPassword("123");
Date date=new Date();
SimpleDateFormat temp=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String date2=temp.format(date);
Date date3=temp.parse(date2);
user.setCreateTime(date3);
user.setExpireTime(date3);
//Persistent状态
//Persistent状态的对象,当对象的属性发生改变的时候
//hibernate在清理缓存(脏数据检查)的时候,会和数据库同步
session.save(user);
user.setName("lisi");
tx.commit();
}catch(Exception e) {
e.printStackTrace();
if (tx != null) {
tx.rollback();
}
}finally {
HibernateUtils.closeSession(session);
}
//detached状态
user.setName("wangwu");
try {
session = HibernateUtils.getSession();
session.beginTransaction();
//将detached状态的对象重新纳入session管理
//此时将变为persistent状态的对象
//persistent状态的对象,在清理缓存是会和数据库同步
session.update(user);
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
} </span></strong></span></strong>
<strong><span style="font-size:18px;"><span style="font-size:18px;"><strong>Hibernate: insert into User (name, password, createTime, expireTime, id) values (?, ?, ?, ?, ?) Hibernate: update User set name=?, password=?, createTime=?, expireTime=? where id=? Hibernate: update User set name=?, password=?, createTime=?, expireTime=? where id=?</strong></span></span></strong>
Transient
*没有被session管理
*在数据库中没有与之匹配的记录
Persist
*纳入session管理
*在数据库中有与之匹配的记录
*当属性发生改变,在清理缓存时(脏数据检查)会自动和数据库同步
Detached
*没有被session管理
*在数据库中存在与之匹配的记录
【hibernate进阶】hibernate持久化对象的三种状态
标签:
原文地址:http://blog.csdn.net/chenxiaochan/article/details/51526339