hibernate 列名称问题

问题描述 投票:0回答:10
@Column(name="DateOfBirth")
private Date dateOfBirth;

我特别需要上面的代码来创建一个名为“DateOfBirth”的列,而 Hibernate 为我提供了一个名为 date_of_birth 的列。我怎样才能改变这个?有 web.xml 属性吗?我遇到了 DefaultNamingStrategy 和 ImproveNamingStrategy,但不确定如何指定其中之一。

java hibernate annotations
10个回答
41
投票

尝试将其放入

应用程序.属性

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

34
投票

仅供参考:插入下划线的原因可能是因为您正在使用ImprovedNamingStrategy。它是在您的 Configuration 对象上设置的。请参阅此处查看示例...

如果你不需要下划线,你可以不设置命名策略,或者将其设置为你之前发现的DefaultNamingStrategy。


12
投票

这是一个可能的解决方法:如果您将其命名为

dateofbirth
,数据库中的列将如此命名,但属性名称应该相同。

Hibernate 采用驼峰式大小写格式来创建/读取数据库列。

我以前也遇到过这个问题。我使用旧列,其中列名称“employeename”、“employeerole”、“departmentlocation”中没有空格。我讨厌它,因为我所有的豆子属性都必须没有驼峰式。

由“_”分隔的数据库列将用于正确的驼峰命名法,正如您刚刚看到的那样。


10
投票

在 Spring Boot 的情况下添加以下属性。

spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

7
投票

将@Column注解放在getter上:

@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}

5
投票

建议的解决方法是使用 @Column(name="dateofbirth"),它适合我的目的。


5
投票

ImprovedNamingStrategy 有方法 addUnderscores(),它是从 tableName() 和 columnName() 调用的 您可以实现自己的命名策略类并根据您的选择覆盖它们

    public class MyOwnNamingStrategy extends ImprovedNamingStrategy {
        @Override
        public String tableName(String tableName) {
        //return addUnderscores(columnName); // skip this
        return columnName; // if you want column name variable name same
        //return changeAsYouWant(columnName); // as name sames
       }
   }

1
投票

您可以注释字段或 getter 方法,这没有什么区别。您可以发布完整的 hibernate.cfg.xml 或 persistence.xml 文件吗?


0
投票

我不是100%确定,但是你不需要注释get方法而不是私有变量吗?


0
投票

我遇到了类似的问题,并将以下两个属性添加到我的应用程序中。属性解决了我的问题:

spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
.

© www.soinside.com 2019 - 2024. All rights reserved.