持久化类

持久化:将内存中的一个对象持久化到数据库中的过程

持久化类:Java类+映射文件。Java中一个类与数据库的表建立了映射关系,那么这个类称为持久化类。

持久化类的编写规则:

  • 对持久化类提供一个无参构造,Hibernate底层需要通过反射生成实例。
  • 对属性需要私有,对私有属性提供公有的set、get方法,Hibernate中获取、设置对象的值。
  • 对持久化类提供一个唯一标识OID与数据库主键对应,Java中通过对象的地址区分是否是同一个对象,数据库中通过主键确定是否是同一个记录。HIbernate通过持久化的oid属性区分是否同一个对象
  • 持久化类的属性尽量使用包装类的类型,而不是基本数据类型,因为基本数据类型默认值是0,会有很多歧义,而包装类的默认值是null。
  • 持久化类不要用final进行修饰 ,延迟加载本身是Hibernate的一个优化的手段,返回的是一个代理对象(javasist可以对没有实现接口的类产生代理,使用了非常底层的字节码增强技术,继承这个类进行代理)如果不能被继承,延迟加载失效,load和get一致。

持久化类的三种状态(了解):

瞬时态:这种没有唯一标识oid,没有被session管理

持久态:有唯一标识oid,被session管理,持久化类的持久态的对象,可以自动更新数据库(一级缓存,后面介绍)。

脱管态:有唯一标识,没有被session管理

区分三种状态对象:

持久化类的状态转换:(了解)

瞬时态对象:

获得: Customer c = new Customer();

状态转换:瞬时转持久: session.save() , session.saveOrUpdate()

瞬时转脱管:   Customer.setCust_id(1);  瞬时与脱管的区别在于有没有oid

持久态对象:

获得:session.get , session.load : Customer customer = session.get(Customer.Class , 1 );   被session管理,有oid

状态转换:转瞬时:session.delete();

转脱管:session.close();

脱管态对象:

获得:new 一个对象,为其设置id

状态转换:转持久:update \ saveOrUpdate,有id,被session管理

        转瞬时:customer.setCust_id(null);

主键生成策略:

主键的分类:

自然主键:主键的本身是表中的一个字段(实体中一个具体的属性),比如身份证号。

代理主键:用一个与这个表不相关的字段id(PNO),这种主键称为代理主键。

实际开发当中尽量使用代理主键,一旦自然主键参与业务逻辑,后期可能需要修改源代码。好的程序的设计满足OCP原则。对程序的扩展是open的,对修改源码是close的。

Hibernate的主键生成策略:

实际开发中一般不允许用户手动设置主键,一般将主键讲给数据库,手动编写程序进行设置。在Hibernate中为了减少程序的编写,提供了很多主键的生成策略。

  • increment:Hibernate中提供的自动增长机制,适用于int、short、long。仅在单线程中使用。首先发送查询语句,然后让id+1,作为下一条记录的主键。
  • indentity:适用于short、int、long类型的主键,使用数据库底层的自动增长机制,适用于有自动增强机制数据库(MySQL),但是Oracle没有自动增长机制。
  • sequence:适用于short、int、long类型的主键,采用序列的方式,(Oracle支持序列,MySQL不行)
  • UUID:适用于字符串类型的主键,使用Hibernate中一种随机的方式生成字符串主键
  • native:本地策略,可以在indentity和sequence之间进行自动切换,注意只能是short,int , long类型的主键,不适用String类型的主键。
  • assigned:Hibernate放弃外键管理,需要通过手动编写程序或者用户自己设置。
  • Foreign:外部的,一对一的一种关联映射的情况下使用(了解)。

转载于:https://www.cnblogs.com/ltfxy/p/10302894.html

三 Hibernate持久化状态主键生成策略相关推荐

  1. Hibernate标识符属性(主键)生成策略全析

    数据库中的主键能够唯一识别一条记录,它可以是一个字段也可以是多个字段的组合.主键的主要作用是标识表中的一条记录,还有和其他表中的数据进行关联.数据库中的主键类型必须符合唯一性约束和非空约束.作为附加属 ...

  2. hibernate 7大主键生成策略详解与对象状态

    一:代理主键_主键自增 1.identity 1.采用底层数据库本身提供的主键生成标识符,条件是数据库支持自动增长数据类型 2.该生成器要求在数据库中把主键定义成为自增长类型.适用于代理主键 2.in ...

  3. 【吐血整理】Hibernate常用的主键生成策略的原理、优缺点、应用场合

    // 此文由老猫烧须整理,其中加上本人的使用教程,如有误,欢迎指出 // 仅作学习以及备份使用,转载如带有本人整理资料请注明出处 // 欢迎大家留言交流 简介版: increment:代理主键,适合于 ...

  4. hibernate笔记(三) Hibernate标识符属性(主键)生成策略全析

    2019独角兽企业重金招聘Python工程师标准>>> 其实网络有很多文章都写的很好, 只要我们去一一敲下来,那么就很容易融会贯通了,复制黏贴博客太累,大家直接看大神写的吧 : ht ...

  5. 基于按annotation的hibernate主键生成策略

    这里讨论代理主键,业务主键(比如说复合键等)这里不讨论. 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id ...

  6. jpa基于按annotation的hibernate主键生成策略

    JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 一.JPA通用策略生成器  通过annotation来映射hibernate实体的,基于annotation的hi ...

  7. Hibernate主键生成策略总结(这里面讲的很详细)

    Hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定关键字来告诉hibernate我们要使用的主键生成方式,然后hibernate会根据设定完成数据库的主键控制. 一.首先通 ...

  8. JPA实体注解与hibernate主键生成策略

    JPA实体注解与hibernate主键生成策略 用hibernate注解开发项目,对于主键的生成策略有些模糊,下面是从新浪网里面看到的一篇关于hibernate注解以及主键生成策略的文章,值得一看: ...

  9. Hibernate主键生成策略总结

    Hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定关键字来告诉hibernate我们要使用的主键生成方式,然后hibernate会根据设定完成数据库的主键控制. 一.首先通 ...

  10. 主键由数据库mysql 映射native_Hibernate主键生成策略详解

    转载自:http://blog.csdn.net/wanghuan203/article/details/7562395 hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定 ...

最新文章

  1. 在Linux里设置环境变量的方法(export PATH)
  2. Mockito的使用(一)——@InjectMocks、@Spy、@Mock
  3. jQuery EasyUI combobox多选及赋值
  4. matlab双极性眼图,实验报告三编程做单极性码眼图仿真
  5. [LeetCode]小工具,统计数量,隐藏上锁的题目
  6. ansoft maxwell破解版下载v16 中文版 32bit 64bit 百度云盘分享下载链接目录点击下方链接下载即可获得
  7. 75道逻辑思维题及答案--计算机面试大全
  8. SuperMap iClient3D for WebGL教程(特效)- 点光源
  9. Google搜索命令语法
  10. H5开发html文件转换pdf,将HTML页面转换为PDF文件并导出
  11. Linux如何删除用户
  12. java判断英文符号_Java判断中英文符号、标点的实现
  13. java学生基本信息管理_Java课程设计 - 学生基本信息管理
  14. word删除页眉下面的横线
  15. 服务器老被攻击?如何避免服务器被恶意攻击?
  16. 2020年拼多多校招面试题及答案-最全最新-持续更新中(2)
  17. 不等距双杆模型_对磁场中双杆模型问题的解析(精)
  18. java 对Outlook保存的.Msg格式文件解析
  19. 网络摄像机(ip camera)安装设置步骤
  20. CSV转数组、CSV转JSON(JS+PHP双版本)

热门文章

  1. HCIE Security Anti-DDos系统组成 备考笔记(幕布)
  2. LVS详解(六)——LVS DR模式实战
  3. PTA(BasicLevel)-1009 说反话
  4. JAVA + LR实现apache流媒体的性能测试
  5. zabbix+ldap认证故障解决一例
  6. Java8初体验(一)lambda表达式语法
  7. C# 全局唯一标识符 (GUID)
  8. ubuntu 10.04 源
  9. Linux下配置MySQL免安装版
  10. ***检测(IDS)存在的问题及发展趋势