Java EJB3NamingStrategy与改进的namingstrategy外键命名

Java EJB3NamingStrategy与改进的namingstrategy外键命名,java,hibernate,Java,Hibernate,我在hibernate中的命名策略是默认的:EJB3NamingStrategy。所以字段和表的名称是camelcase。我把它换成了改进的NamingStrategy来对付snakecase 但是我的外键在名称中不包括被引用实体的主键名称 例如: 表1: 身份证件 名字 使用EJB3命名策略,表2字段将为: 表2: 身份证件 表1 但通过改进命名策略,表2字段将: 表2: 身份证件 表1 有没有一种方法可以通过改进的命名策略来识别。我不明白为什么hibernate的行为会有所不同,因为两种策略

我在hibernate中的命名策略是默认的:EJB3NamingStrategy。所以字段和表的名称是camelcase。我把它换成了改进的NamingStrategy来对付snakecase

但是我的外键在名称中不包括被引用实体的主键名称

例如:

表1: 身份证件 名字

使用EJB3命名策略,表2字段将为:

表2: 身份证件 表1

但通过改进命名策略,表2字段将: 表2: 身份证件 表1


有没有一种方法可以通过改进的命名策略来识别。我不明白为什么hibernate的行为会有所不同,因为两种策略中的logicalCollectionColumnName方法是相同的。

扩展改进的命名策略并进行自定义,也许改进的NamingStrategy的最初实现错误了,然后他们无法修复它,因为它会破坏向后兼容性。

这个问题在spring boot 1.2.7.RELEASE中得到解决。jpa hibernate包的文档中也指定了此线程的引用。班级签名如下:

package org.springframework.boot.orm.jpa.hibernate;

public class SpringNamingStrategy extends ImprovedNamingStrategy {}

如果使用EJB3NamingStrategy,则logicalCollectionColumnName中接收到的参数已包含列id,但如果使用ImprovedNamingStrategy,则该参数不会接收到它。我不明白为什么。这个方法是从代码中的其他地方调用的。是的,你写的,我没有找到正确的方法。id部分被注释