Hibernate持久化对象
Posted JillWen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate持久化对象相关的知识,希望对你有一定的参考价值。
持久化类应遵循的规则:
- 有无参构造器,构造器的修饰符>=默认访问控制符
- 有标识属性,映射数据库表的主键,建议使用基本类型的包装类
- 每个成员有setter和getter
- 非final修饰的类
- 重写equals()和hashCode()方法(当需要把持久化类的属性放进Set中时)
持久化类的状态:
改变持久化对象状态的方法:
持久化实体:
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持久化对象的主要内容,如果未能解决你的问题,请参考以下文章