Hibernate中实体映射时的命名策略(2)

在Hibernate 5.x中,Hibernate将实体名称映射到数据库中时,将这个过程分成两个步骤:

  • 第一个阶段是从对象模型中提取一个合适的逻辑名称,这个逻辑名称可以由用户指定,通过@Column和@Table等注解完成,也可以通过被Hibernate的ImplicitNamingStrategy指定;
  • 第二个阶段是将上述的逻辑名称解析成物理名称,物理名称是由Hibernate中的PhysicalNamingStrategy决定;

在之前,我在Hibernate中实体映射时的命名策略(1)中详细说明了通过继承DefaultNamingStrategy来指定我们的自己的命名策略,但是从Hibernate 5.X开始,命名策略就被分成上述的两个步骤,从官方的文档中的得知这样做的目的是提高灵活性,减少构建命名策略过程中用到的重复的信息。

但是从目前看来,我自身并没有感觉到这种从新设计的好处,反而有点复杂。

一、ImplicitNamingStrategy

当一个实体对象没有显式的指明它要映射的数据库表或者列的名称时,在Hibernate内部就要为我们隐式处理,比如一个实体没有在@Table中的指明表名,那么表名隐式的被认为是实体名,或者@Entity中的提供的名称。

这些隐式的处理都是Hibernate帮我们做的,Hibernate中定义了多个ImplicitNamingStrategy的实现,可以开箱即用。而之前的逻辑名名称就是物理名称这种策略只是其中一种,其他还包括:

  • ImplicitNamingStrategyJpaCompliantImpl:默认的命名策略,兼容JPA 2.0的规范;
  • ImplicitNamingStrategyLegacyHbmImpl:兼容Hibernate老版本中的命名规范;
  • ImplicitNamingStrategyLegacyJpaImpl:兼容JPA 1.0规范中的命名规范
  • ImplicitNamingStrategyComponentPathImpl:大部分与ImplicitNamingStrategyJpaCompliantImpl,但是对于@Embedded等注解标志的组件处理是通过使用attributePath完成的,因此如果我们在使用@Embedded注解的时候,如果要指定命名规范,可以直接继承这个类来实现;

它们之间的关系如下:

这里写图片描述

那我们在哪设置这些策略以便它们起作用呢?

方法1:

在Hibernate的配置信息设置的时候,如下:

Configuration config = new Configuration().configure();
config.setImplicitNamingStrategy(ImplicitNamingStrategyComponentPathImpl.I
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值