Java @JoinColumn使用不同的列名
我正在使用Java @JoinColumn使用不同的列名,java,hibernate,spring-mvc,jpa,orm,Java,Hibernate,Spring Mvc,Jpa,Orm,我正在使用@JoinColumn注释进行一对多映射,如下所示: @JoinColumn(name=“domainId”,referencedColumnName=“domainId”) 但是,在外键列中,表中的名称显示为domain\u id。有人能帮我解决这个问题吗?@JoinColumn中的属性是数据库表列的名称 因此,这必须是域id您可能正在使用一个org.hibernate.cfg.NamingStrategy实现,它用下划线替换了camelcase。与org.hibernate.cfg
@JoinColumn
注释进行一对多映射,如下所示:
@JoinColumn(name=“domainId”,referencedColumnName=“domainId”)
但是,在外键列中,表中的名称显示为
domain\u id
。有人能帮我解决这个问题吗?@JoinColumn中的属性是数据库表列的名称
因此,这必须是域id您可能正在使用一个
org.hibernate.cfg.NamingStrategy
实现,它用下划线替换了camelcase。与org.hibernate.cfg.ImprovedNamingStrategy
列解析方法类似:
/**
* Convert mixed case to underscores
*/
public String columnName(String columnName) {
return addUnderscores(columnName);
}
我建议使用org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
,因为它应该按原样解析列名:
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
return name;
}
要更改该设置,请在sessionFactory配置中进行设置:
hibernate.physical_naming_strategy=
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
如果您仍然有问题,您可能需要编写自己的NamingStrategy:
public class CustomNamingStrategy extends SpringPhysicalNamingStrategy{
...
@Override
public Identifier toPhysicalColumnName(Identifier name
, JdbcEnvironment jdbcEnvironment) {
return getIdentifier(name.toString(), name.isQuoted(), jdbcEnvironment);
}
}
是什么创建了这个表?你呢?或者你的JPA提供商?通过使用PhysicalNamingStratergyStandardImpl解决了我的问题。非常感谢