Hibernate在更新对象的时候,如果对象的有些属性没有设置,那么在更新的时候,会被默认为空。
特别在更新表单对象的时候。
例子:
如: Department部门类
该部门类有以下属性: 
id : Long 
name : String (注:部门名称)
description : String  (注:部门说明)
parent : Department  (注:上级部门)
children : Set<Department> (注:下级部门)

修改页面表单: 除了children属性没有提供设置外,其他属性都有相应的输入框等进行设置(其中id是隐藏字段)。

那么该页面提交到的页面表单对象是只包含了id, name , description , parent 的实体,如果直接使用该对象进行更新的话,那么就会使得该对象修改之前的children属性为空。
也就是说,如果该“开发部门”对象,通过session.update(department)后,“开发部门”对象下的“研发组”,“编程组”等下级部门就变成了没有上级部门的部门。
如果需要只改变“开发部门”部门对象的name属性和description、parent属性,而不改变原有的“children”属性,那么,我们就要使用以下的方法来进行更新,而不是直接更新。
首先,通过页面表单传递过来的“开发部门”部门的id进行查找在数据库中的该持久化对象;
然后,通过给该持久化对象的name,description,parent 属性进行set()方法赋值;
最后,使用session.update()方法,更新该持久化对象,那么就会只更新了该持久化对象的name,description,parent属性。而不改变原有的children属性。

session更新对象的参考代码:
  1. SessionFactory sessionFactory = new SessionFactory();
  2. Session session = null;
  3. try{
  4. session = sessionFactory.openSession();
  5. session.beginTranscation();
  6. session.update(entity);
  7. session.getTransaction().commit();
  8. }catch(Exception e){
  9. session.getTransaction().rollback();
  10. }finally{
  11. session.flush();
  12. session.close();
  13. }

使用Hibernate框架来更新对象的注意事项的更多相关文章

  1. ECLIPSE/JAVAWEB (二)三大框架之Hibernate框架 持续更新中...

    (一)发展历史 在Struts框架中使用jdbc连接来读写数据库,我们最常见的就是打开数据库连接.使用复杂的sql语句进行读写.关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常繁琐的过程. ...

  2. (转)Hibernate框架基础——Java对象持久化概述

    http://blog.csdn.net/yerenyuan_pku/article/details/52732990 Java对象持久化概述 应用程序的分层体系结构 基于B/S的典型三层架构  说明 ...

  3. hibernate框架学习之对象状态

    lHibernate对象共有三种状态 •瞬时状态:瞬时对象 •持久化状态:持久化对象 •托管状态:托管对象 l瞬时对象(Transient Object),简称TO l瞬时对象指的是应用程序创建出来的 ...

  4. hibernate框架(3)---持久化对象

    持久化对象 再讲持久化对象之前,我们先来理解有关session中get方法与 load方法区别: 简单总结: (1)如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库 ...

  5. hibernate框架的核心对象和相关知识点

    Hibernate架构下图提供了hibernate体系的高层视图: Hibernate全面解决方案: Hibernate核心APIConfiguration负责管理数据库的配置信息.数据库的配置信息包 ...

  6. Hibernate框架用法

    一,Hibernate框架介绍 没有Hibernate之前,使用jdbc来连接数据库时,需要反射加载驱动,再获取连接 在连接上获取sql承载块,传入sql语句执行,获取结果集,解析结果 Hiberna ...

  7. Hibernate 框架理解

    Hibernate框架简化了java应用程序与数据库交互的开发.Hibernate是一个开源,轻量级的ORM(对象关系映射)工具. ORM工具简化浏览数据的创建,数据处理和数据访问.它是将对象映射到数 ...

  8. 【Hibernate框架】对象的三种持久化状态

    一.综述 hibernate中的对象有三种状态,分别是TransientObjects(瞬时对象).PersistentObjects(持久化对象)和DetachedObjects(托管对象也叫做离线 ...

  9. java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)

    1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...

随机推荐

  1. [转]mysql联合索引

    mysql联合索引   命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 https:/ ...

  2. vue cli 3 & webpack-merge & webpack 3 & bug

    vue cli 3 & webpack-merge & webpack & bug bug webpack-merge & bug webpack-merge ??? ...

  3. IE8专用hack

    众所周知,ie6.7的hack直接用*即可,但是ie8的话就比较麻烦,在做半透明背景的时候,为了兼容ie6.7,可以为其设置纯色,但是ie8也同样不支持半透明,需要单独为它设置纯色背景.下面的兼容代码 ...

  4. 【BestCoder #44】

    因为这场比赛,我愉快地逃掉了晚自修. T1一开始各种SillyB,忘了40%的最低限制... T2各种想吐槽... 明明OJ警告说%lld是不行的我就换成%I64D(上面写这样的)... 结果各种WA ...

  5. 如何进入百度、阿里,一个6年Android老司机的面经

    花絮 也许会有人感叹某些人的运气比较好,但是他们不曾知道对方吃过多少苦,受过多少委屈.某些时候就是需要我们用心去发现突破点,然后顺势而上,抓住机遇,那么你将会走向另外一条大道,成就另外一个全新的自我. ...

  6. 2017 多校4 Security Check

    2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...

  7. The UVALIVE 7716 二维区间第k小

    The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询 每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素 n <= 2 ...

  8. display:table-cell的min-height

    table-cell的元素min-height是不起作用的,直接使用height就行,当高度不足时,table会自动拉伸cell元素. 此时,height相当于min-height. 出处:https ...

  9. eclipse快捷键及各种设置

    1.提示键配置一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项 ...

  10. linux 大中括号变量解读

    Linux中的小括号和大括号,${}/$()/()/{}/${var:-string}/${var:=string}/${var:+string}/${var:?string}/${var%patte ...