• 使用Hibernate框架来更新对象的注意事项


    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. }





  • 相关阅读:
    随机生成三十个二年级的加减乘除法的题目代码
    学习进度表_四周
    返回一个整数数组中最大子数组的和1
    学习进度表_三周
    四则运算4
    构建之法读书笔记2
    学习进度表_二周
    四则运算3
    四则运算2
    单元测试
  • 原文地址:https://www.cnblogs.com/JamKong/p/4561828.html
Copyright © 2020-2023  润新知