善倾的知识体系构建之路

Hibernate 的主键生成策略

2018-09-09  本文已影响12人  善倾

Hibernate 是一个 ORM 框架,它的核心作用就是建立内存中的 Java 对象和数据库表中的记录的对应关系。

Java 语言按照内存地址来区分不同的对象,而关系数据库中则按照主键值来区分同一个表中的不同记录。那 Hibernate 作为中间人,如何建立记录和对象之间的关系呢?它是通过在 POJO 对象中维护一个 OID(对象标识符) 来统一这两者的矛盾。POJO 对象中的 OID 属性值和数据库中对应记录的主键值是相同的。也就是说任何一个对象纳入 Session 管理时,都必须拥有 OID ,否则 Session 根本无法管理对象。

也就是说 Hibernate 要求 POJO 类必须拥有一个 OID 属性,从某种程度上来说,这也算是 Hibernate 对业务逻辑层的一种侵入,但这也是没有办法的事情。所以通常也只是说 Hibernate 低侵入性!

Hibernate 的主键生成策略常用的有以下几个:

总结一下,主键生成策略可以分为三类:

native 主键生成策略

xxx.hbm.xml文件中给对象标识符指定生成策略的配置方式如下:

<id name = "id">
    <generator class="native"/>
</id>

由于这种主键生成方式需要具体的数据库来决定,所以 Session 调用save()方法的时候,Hibernate 就会执行 insert 语句将对象的值插入到数据库中,以得到标识符,才能够将该对象纳入到 Session 的缓存中进行管理。

补充:主键分为自然主键和代理主键,所谓自然主键就是有具体业务含义的,比如以学号、身份证号为主键。代理主键就是没有任何实际业务含义的,开发中推荐使用这种方式。

上一篇 下一篇

猜你喜欢

热点阅读