Hibernate用户手册:2.2 命名策略

命名策略

将一个对象模型的名字映射到响应的数据库名字是映射一个对象模型到关系数据库的一部分。Hibernate 将这个分为两个步骤:

  • 第一步是从领域模型映射中确定一个合适的逻辑名称。一个逻辑名称即可以被用户明确的制定,也可以被Hibernate通过一个隐式命名策略约定隐式地指定。
  • 第二步是将logical name解析为physical name,physical name是被PhysicalNamingStrategy 协议定义的。
过去的 NamingStrategy协议
过去 Hibernate仅仅定义了一个org.hibernate.cfg.NamingStrategy。这个仅有的NamingStrategy 协议其实将几个分开的问题合二为一,这些问题现在个别的包括在ImplicitNamingStrategy和PhysicalNamingStrategy。
并且,NameStrategy协议过去常常不够灵活地去处理一个命名规则,可能因为API缺少信息来决策,也可能因为在Hibernate成长后,这个API定义的确实不好。
由于这些限制,org.hibernate.cfg.NamingStrategy已经被弃用,并且之后被删除,现在推荐使用ImplicitNamingStrategy 和 PhysicalNamingStrategy。

在核心,每一个命名策略背后的理念是最小化重复信息的数量,一个开发者必须提高一个领域模型的映射。

JPA 兼容性

JPA定义了关于隐式逻辑命名固有的规则。如果JPA供应器可移植性是一个主要问题,或者如果你真的就喜欢JPA定义的隐式命名规则,务必坚持使用ImplicitNamingStrategyJpaCompliantImpl(默认)。

另外,JPA没有区分logical 和 physical name。遵循JPA规范,logical name是physical name。如果JPA供应商兼容性很重要,程序不应该去指定一个PhysicalNamingStrategy。

ImplicitNamingStrategy

当一个entity没有明确指定他映射的数据库表名时,我们需要隐式地决定表名。或者当一个属性没有明确指定映射的数据库列名时,我们需要隐式地决定列名。有列子关于org.hibernate.boot.model.naming.ImplicitNamingStrategy协议在映射没有提供明确名字时决定一个logical name。
这里写图片描述
hibernate 定义了多种开箱即用的ImplicitNamingStrategy实现。程序也可以自由地使用自定义的实现。

有多种方式去指定ImplicitNamingStrategy来使用。首先,程序可以通过hibernate.implicit_naming_strategy配置设置来指定一个实现,这个配置可以接受:为开箱即用的实现所与定义的简称;

  • default :for org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl - an alias for jpa
  • jpa : for org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl - the JPA 2.0 compliant naming strategy
  • legacy-hbm : for org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl - compliant with the original Hibernate NamingStrategy
  • legacy-jpa:for org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl - compliant with the legacy NamingStrategy developed for JPA 1.0, which was unfortunately unclear in many respects regarding implicit naming rules
  • component-path :for org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl - mostly follows ImplicitNamingStrategyJpaCompliantImpl rules, except that it uses the full composite paths, as opposed to just the ending property part
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值