[ Hibernate ] Hibernate 的主键生成策略、一级缓存以及事务管理(2)

1.持久化类的编写规则

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

2.主键生成策略

2.1主键的分类

2.1.1自然主键
  • 主键本身就是表中的一个字段(实体中的一个具体的属性)
  • 创建一个人员表,人员都会有一个身份证号(唯一不可重复),人员的身份证号作为主键,这种主键为自然主键。
2.1.2代理主键(尽量使用)
  • 主键的本身不是表中必须的一个字段(不是实体类的牧歌具体的属性)
    • 创建一个人员表,没有使用人员中的身份证号,用了一个与这个表不相关的字段ID(PNO),这种主键就是代理主键。
  • 在实际开发中,尽量使用主键。、
    • 一旦主键参与到业务逻辑中,后期可能要修改源代码。
    • 好的程序设计满足OCP 原则:对程序的扩展是open的,对修改源码是close的。

2.1.3主键生成策略

2.1.3.1 Hibernate 的主键生成策略
  • 在实际开发中一般不容许用户手动设置主键,一般将主键交给数据库,手动编写程序进行设置,在Hibernate中为减少程序编写,提供了很多种主键的生成策略。
<hibernate-mapping>
    <!--建立类与表的影射-->
    <!--当类名与表名同名时,可省略表名的映射-->
    <class name="com.sunlong.hibernate01.domain.Custom" table="cst_customer">
        <!--建立类中的属性与表中的主键对应-->
        <id name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值