hibernate对象状态

来源:互联网 发布:买东西怎么使用淘宝客 编辑:程序博客网 时间:2024/06/03 22:55

     瞬时(transient):数据库中没有数据与之对应,超过作用域会被jvm垃圾回收器回收,一般是new出来且与session没有关联的对象。

  持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。

   脱管(detached):数据库中有数据与之对应,但当前没有session与之关联,脱管对象状态发生改变,hibernate不能检测到。

   


   

import org.hibernate.Session;import org.hibernate.Transaction;import com.shizhan.hibernate.domain.UserBean;import com.shizhan.util.HibernateUtil;public class TestHibernate {   public static void main(String[] args) {//我们刚创建了一个对象,数据库中没有记录相关联,是瞬时状态UserBean user = new UserBean();user.setUsername("shizhan");user.setPassword("123");//当我们调用了添加之后,数据库有记录与user关联了,可是session关闭了,这时候user的状态为脱管的add(user);UserBean u = get(1);System.out.println(u);}public static void add(UserBean user){Session s =null;try{  s = HibernateUtil.getSession();  Transaction t = s.beginTransaction();    //保存user之后,数据库中有和他相关的记录,且session没有关闭,他属于持久状态  s.save(user);    //Hibernate: update UserBean set username=?, password=? where id=?  //hibernate会优化我们的更新操作,可以看到两个set操作,他只执行了一个update语句,他更新的时机是在   //事务提交之前的一小会  user.setUsername("heii");  user.setPassword("heii");    t.commit();}finally{    s.close();}}public static UserBean get( int id){Session s =null;UserBean u =null;try{  s= HibernateUtil.getSession();  u = (UserBean) s.get(UserBean.class,id);  }finally{   if(s!=null)   {      s.close();   }}return u ;}}

  

原创粉丝点击