关于hibernate问题

效林少爷 2010-06-01 08:59:58
最近在学习hibernate,对于hibernate的状态周期,看了很多资料,觉得很简单,但是好像又没有掌握好
求对状态周期的总结的资料
...全文
124 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wo28lf 2010-06-01
  • 打赏
  • 举报
回复
学习一下
Ade子夜 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bb12152205gg 的回复:]
我这有个自己的总结,希望能帮到你

1.状态周期
①瞬时状态对象(Transient Objects)
使用new操作符初始化的对象不是立刻就持久的.它们的状态时瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所应用),它们的状态将会丢失,并有垃圾回收机制回收
②持久化状态对象(Persist Objects)
持久实例是任何具有数据库标……
[/Quote]

大家一起学习!!!
扁鵲東南飛 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bb12152205gg 的回复:]
我这有个自己的总结,希望能帮到你

1.状态周期
①瞬时状态对象(Transient Objects)
使用new操作符初始化的对象不是立刻就持久的.它们的状态时瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所应用),它们的状态将会丢失,并有垃圾回收机制回收
②持久化状态对象(Persist Objects)
持久实例是任何具有数据库标……
[/Quote]

够详细。不错,来学习了,顺便帮楼主顶下帖子。
bb12152205gg 2010-06-01
  • 打赏
  • 举报
回复
我这有个自己的总结,希望能帮到你

1.状态周期
①瞬时状态对象(Transient Objects)
使用new操作符初始化的对象不是立刻就持久的.它们的状态时瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所应用),它们的状态将会丢失,并有垃圾回收机制回收
②持久化状态对象(Persist Objects)
持久实例是任何具有数据库标识的实例.它由持久化管理器Session统一管理,持久实例是在事务中进行操作的--它们的状态在事务结束时同数据库进行同步.
③离线状态对象(Detached Objects)
Session关闭之后,持久化对象就变为离线对象.离线表示这个对象不能再与数据库保持同步,它们不再受Hibernate管理

Transient对象与Detached对象:
相同点:都不被session管理
不同点:Transient对象,数据库没有与之对应的记录;Detached对象,数据库有与之对应的记录


//测试方法(瞬时到持久化)
public void testSave1(){
Session session = null;
Transaction tx = null;
User user = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction();

//Transient(瞬时)状态
user = new User();
user.setName("123");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());

//persistent(持久化)状态
session.save(user);

/*
* 由于目前处于persistent状态
* 当对象的属性发生改变的时候
* hibernate会自动和数据保持同步
* 也就是说,数据库保存的是"456"
*/
user.setName("456");

tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
}
在控制台可以看到打印的sql语句:
Hibernate: insert into t_user
(name, password, createTime, expireTime, id)
values (?, ?, ?, ?, ?)

Hibernate: update t_user set name=?,
password=?, createTime=?, expireTime=?
where id=?
先insert,后面因为属性改变,所以又update
---

public class SessionTest extends TestCase {
//测试方法(瞬时到持久化到离线)
public void testSave2(){
Session session = null;
Transaction tx = null;
User user = null;
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction();

//Transient(瞬时)状态
user = new User();
user.setName("123");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());

//persistent(持久化)状态
session.save(user);

/*
* 由于目前处于persistent状态
* 当对象的属性发生改变的时候
* hibernate会自动和数据保持同步
* 也就是说,数据库保存的是"456"
*/
user.setName("456");

tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
//detached(离线)状态
user.setName("789");
try {
session = HibernateUtils.getSession();
tx = session.beginTransaction();

//回到persistent(持久化)状态
session.update(user);

tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtils.closeSession(session);
}
}
}
你可以再控制台看到sql语句:
Hibernate: insert into t_user (name, password, createTime, expireTime, id)
values (?, ?, ?, ?, ?)
Hibernate: update t_user set name=?, password=?, createTime=?, expireTime=? where id=?
Hibernate: update t_user set name=?, password=?, createTime=?, expireTime=? where id=?
先insert,后面因为属性改变,所以又update,再后来,从离线状态回到持久化状态,并且属性改变,再次update
----------

81,087

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧