Hibernate持久化对象

Posted JillWen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
 

以上是关于Hibernate持久化对象的主要内容,如果未能解决你的问题,请参考以下文章

hibernate工作原理及为啥要用

hibernate框架学习之对象状态

Hibernate 持久化对象和一级缓存

hibernate框架学习之持久化对象OID

Hibernate缓存知识要点

Hibernate之持久化对象