操纵持久化对象

对象状态及生命周期

  • 瞬时状态transient:构造对象(session中没有,数据库中没有)
  • 持久状态persistent:对象被session管理。(session中有,数据库中有)

     持久状态下:当提交事务,清理缓存时发现session中数据和数据库中不一致时,将会把session中的数据更新到数据库中;在保存以后再修改对象,那么将会产生多条sql语句,会造成效率较低,所有建议在save前进行修改。

  • 游离状态detached:session关闭后(session里面没有,数据库里面有)
//对于news对象来说其对应阶段状态
public void testSave(){
        Session session = null;
        Transaction tx =null;
        News news =null;
        try{
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();
            //构造对象---瞬时状态
            news = new News();
            news.setNewsTitle("111");
            news.setNewsContent("2222");
            //持久状态,user被session管理,并且有id有值
            session.save(news);
            news.setNewsTitle("8888");
            tx.commit();
        }catch(Exception e){
            e.printStackTrace();
            tx.rollback();
        }finally{
            HibernateUtils.close(session);
        }
        //游离状态
        System.out.println(news.getNewsTitle());
    }
原文地址:https://www.cnblogs.com/zhouyeqin/p/7194070.html