31
@Column(name="DateOfBirth")
private Date dateOfBirth;

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

4

9 回答 9

39

试着把这个放进去

应用程序属性

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
于 2017-06-13T17:24:53.243 回答
34

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

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

于 2008-12-17T22:38:22.893 回答
12

这是一种可能的解决方法:如果您dateofbirth将其命名,则数据库中的列将被命名,但属性名称应该相同。

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

我以前遇到过这个问题。我使用了一个遗留列,其中列名“employeename”、“employeeerole”、“departmentlocation”中没有空格。我讨厌它,因为我所有的 bean 属性都必须没有驼峰式。

如您所见,由“_”分隔的数据库列将用于正确的驼峰式命名法。

于 2008-12-17T22:26:54.447 回答
8

在弹簧靴的情况下添加以下属性。

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

于 2017-07-30T18:43:52.767 回答
7

将 @Column 注释放在 getter 上:

@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}
于 2008-12-17T21:40:00.763 回答
5

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

于 2008-12-17T22:14:21.850 回答
5

改进的命名策略有方法 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
       }
   }
于 2012-10-15T16:36:40.943 回答
1

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

于 2008-12-17T22:02:17.647 回答
0

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

于 2008-12-17T21:32:45.833 回答