首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

01_hibernate merge步骤的理解

2012-12-27 
01_hibernate merge方法的理解merger()方法,很神奇。它可以用来将一个托管(detached)的VO(Value Object)持

01_hibernate merge方法的理解
      merger()方法,很神奇。它可以用来将一个托管(detached)的VO(Value Object)持久化到数据库,以下是它持久化一个托管vo的步骤:
     1.在持久化上下文(persist context)中查找与托管VO具有相同ID的PO(persist object),如果找到,就将托管的VO的值copy给PO,然后返回持久化以后的对象;
     2.如果在持久化上下文中没有找到,它就会到数据库出找,而且是根据托管的VO提供的ID查找,然后就将托管的VO的值copy给PO,然后返回持久化以后的对象;
     3.如果在数据库也没找到和托管的VO对应的记录,它就会要求new一个和托管的VO相对应的持久化对象,然后执行拷贝,返回持久化以后的对象。
注意:如果传给merge()方法的是一个游离态的(transient)对象,那么就会按照第三步执行



/** * 假设数据库已经存在ID为1的User对象 *///瞬时对象User newuser = new User();newuser.setUsername("admin2");session.beginTransaction();//持久化对象    User user = (User) session.get(User.class, 1);    //newuser托管对象    newuser.setId(user.getId());        //在内存中查找是否存在跟该托管对象id相匹配的对象,如果匹配,就想托管对象内容复制到内存中的对象    session.merge(newuser);        //验证一:放开下面这句话就结果还是admin2,此时newuser始终都是一个托管对象   // newuser.setUsername("admin3");              session.getTransaction().commit();

热点排行