当前位置:首页 > Web开发 > 正文

2、Hibernate持久化编写

11-11 Web开发

标签:

一、对于hibernate中的PO编写规则:

1. 必须提供一个无参数的public构造方法

 

2. 所有属性要private ,对外提供public get/set方法

 

3. PO类必须提供一个标识属性,让它与数据库中的主键对应,我们管这个属性叫OID,Hibernate框架它是通过OID来区分不同的PO对象,如果在内存中有两个相同的OID对象,那么hibernate认为它们是同一个对象。

 

4. PO类中的属性尽量使用基本数据类型的包装类,使用基本数据类型是没有办法去描述不存在概念,如果使用包装类型,它就是一个对象,对于对象它的默认值是null.。

 

5. PO类它不能使用final修饰符,Get/load方法它们都是根据id去查询对象。

  1. get直接得到了一个持久化类型对象,它就是立即查询操作

  load它得到的是持久化类开的代理类型对象(子类对象)。它采用了一种延迟策略来查询数据。

  2. get方法在查询时,如果不存在返回null

  load方法在查询时,如果 不存在,会产生异常 ObjectNotFoundException.

二、Hibernate主键生成策略

 Hibernate中定义的主键类型包括:自然主键和代理主键:

 自然主键:具有业务含义 字段 作为主键,比如:学号、身份证号

代理主键:不具有业务含义 字段作为主键(例如 自增id),比如:mysql自增主键,oracle序列生成的主键、uuid()方法生成的唯一序列串

建议:企业开发中使用代理主键!


             

技术图片

三、Hibernate持久化对象状态持久化对象三种状态

1. 瞬时态:也叫做临时态或自由态,它一般指我们new出来的对象,它不存在OID,hibernate session无关联,在数据库中也无记录。它使用完成后,会被jvm直接回收掉,它只是用于信息携带。

简单说:无OID 与数据库中的信息无关联,不在session管理范围内。

 

2. 持久态:在hibernate session管理范围内,它具有持久化标识OID它的特点,在事务未提交前一直是持久态,当它发生改变时,hibernate是可以检测到的。

简单说:有OID session管理,在数据库中有可能有,也有可有没有。

 

3. 托管态:也叫做游离态或离线态,它是指持久态对象失去了与session的关联,托管态对象它存在OID,在数据库中有可能存在,也有可能不存在。

对于托管态对象,它发生改变时hibernet不能检测到。

判断持久化类对象三种状态:

1. 是否有OID

2. 判断是否与session关联

                 

技术图片

1. 瞬时态(new 出来的)

瞬时------持久  save   saveOrUpdate

瞬时-----脱管(游离)  手动设置oid

 

2. .持久态   它是由session管理

        持久-------瞬时   delete() 被删除后持久化对象不在建议使用

        持久-----脱管  注意:session它的缓存就是所说的一级缓存

温馨提示: 本文由杰米博客推荐,转载请保留链接: https://www.jmwww.net/file/web/10173.html