zoukankan      html  css  js  c++  java
  • Hibernate持久化对象

    持久化类应遵循的规则:
    •     有无参构造器,构造器的修饰符>=默认访问控制符
    •     有标识属性,映射数据库表的主键,建议使用基本类型的包装类
    •     每个成员有setter和getter
    •     非final修饰的类
    •     重写equals()和hashCode()方法(当需要把持久化类的属性放进Set中时)
     
    持久化类的状态:
     
      来自《轻量级JavaEE 企业应用实战》李刚著
     
    改变持久化对象状态的方法:
     
    持久化实体:
        Serializable save(Object obj)   保存到数据库
        void persist(Object obj)
        Serializable save(Object obj,Object pk) 保存到数据库,指定主键值
        void persist(Object obj,Object pk)
    save()和persist()方法的区别:使用sava()方法时,会立即将持久化对象插入数据库,返回该持久化对象的标识属性值。
                                                  使用persist()方法时,不会立即插入数据库,没有返回值。
     
    根据主键加载持久化实体:
        News n = sess.load(News.class , pk);
         根据主键加载一条记录,如果数据库中没有对应记录时可能会抛出 HibernateException异常,如果指定了延迟加载,则load方法会返回一个未初始化的代理对象,这个代理对象会直到程序调用它的某方法时才访问数据库。
        与get()方法的区别:get()方法会立刻访问数据库(没有延迟加载),没有对应记录时返回null,而不是代理对象。、
     
    更新持久化实体:
         n.setTitle("新标题");
          修改对象最简单的方法就是在Session处于打开状态时load它,然后直接修改即可,不需要调用update()方法。
     
    更新托管实体:
        update()
        updateOrSave()判断对象是否持久化过,如果有,执行update()操作,否则,执行save()操作。
        merge()不持久化给定的对象,而是返回对象的副本,该副本处于持久化状态。如果Session中存在相同持久化标识的持久化对象,merge()方法里提供的对象状态覆盖原来的实例状态。如果没有,尝试从数据库中加载,或者创建新的持久化实例,最后返回该吃菊花实例对象。
                     
    删除持久化实体:
        News n = sess.load(News.class , pk);
        sess.delete(n);
     
  • 相关阅读:
    BUUOJ | [ACTF新生赛2020]usualCrypt (多重加密)
    高数笔记 | 快速索引 + 期末总结(2019-2020学年第二学期)
    BUUOJ | SimpleRev(字符对称加密)
    CTF OJ 题目分类 | Reverse
    CPPU程序设计训练营清明天梯模拟赛题解
    数据可视化 | 2020年3月世界疫情实存人数地图
    CTF OJ 题目分类 | PWN
    BJDCTF 2nd | Strenuous_Huffman(二进制模拟)
    ssh连接慢优化
    日常问题处理
  • 原文地址:https://www.cnblogs.com/goingforward/p/5817301.html
Copyright © 2011-2022 走看看