hibernate中持久化类及主键生成策略

Hibernate 中持久化类:

1、什么是持久化类:

  • 持久化:将内存中的一个对象持久化到数据库中,hibernate就是用来持久化的框架;
  • 持久化类:一个java文件和数据库表建立了映射关系,那么这个类在hibernate中就称为持久化类。简单的说持久化类=Java类+映射文件;

2、持久化类的编写规则:

  • 对持久化类提供一个无参数的构造函数;(hibernate需要通过反射来生成对象的实例)
  • 属性私有化,提供公有的get和set方法;(hibernate 要通过该方法来获取和设置对象的值)
  • 对持久化类提供一个唯一标识OID与数据库主键对应;(Java中通过对象的地址来区分是否是同一个对象,数据库中通过OID来区分是否是同一条记录,在hibernate中通过对象的OID来区分是否是同一个对象)
  • 持久化类中尽量使用包装类类型;  (因为基本数据类型默认值是0,0会有歧义,例如该项是没有值还是值为0,而包装类类型默认值 是null,则不存在歧义)
  • 持久化类不要用finall修饰;  (因为延迟加载本来就是hibernate的一种优化手段,返回的是一个代理对象(javassist可以对没有实现接口的类产生代理,jdk动态代理只能对实现了接口的类进行代理,javassist使用了非常底层的字节码增强技术,继承持久化类来产生代理对象的,如果用final修饰则该类不能被继承,则不会延迟加载,hibernate的get方法和load方法作用会完全相同)

3、持久化类的三种状态

  • 瞬时态:这种对象没有唯一的标识OID,没有被session管理;
  • 持久态:有唯一的标识OID,且被session管理;(持久态的对象会自动更新到数据库中
  • 脱管态:有唯一的标识OID,但是不被session管理;

例如:Student stu=new Student();       stu处于瞬时态

           stu.setId("1");

           session.save(stu);                      此时stu处于持久态

           tx.commit();

           session.close();                          此时stu处于托管态   

Hibernate 的主键生成策略

1、主键的分类:

  • 自然主键:主键的本身就是表中的一个字段;
  • 代理主键:主键本身不是表中的一个字段;

2、主键生成策略:

  • increment:    hibernate提供的自增长机制,适用于short,int,long类型的主键,在单线程中使用;(原理:select max(id) from 表作为下一条记录的主键)
  • identity:     适用于short,int,long类型的主键,使用的是数据库底层的自增长机制,适用于有自增长机制的数据库(Mysql),Oracle没有自增长;
  • sequence:   适用于short,int,long类型的主键,采用的是序列的方式;(Oracle支持序列)
  • uuid:        适用于字符串类型的主键,它是由hibernate中随机生成的字符串主键;
  • native:    本地策略;可以在identity和sequence之间自由切换;
  • assigned:   hibernate放弃外键的管理,需要手动编写程序或用户自己设置;
  • foreign:    外部的。一对一的关联映射下使用;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值