2008-12-17 84 views
10
@Column(name="DateOfBirth") 
private Date dateOfBirth; 

我特别需要上面的代码来创建一个名为“DateOfBirth”的列,而不是Hibernate给我一个名为date_of_birth的列。我该如何改变这一点?有没有web.xml属性?我遇到了DefaultNamingStrategy和ImprovedNamingStrategy,但不知道如何指定一个或另一个。hibernate列名问题

+0

可能的工作量。如果你将它命名为dateofbirth,那么DB中的列将被命名为这样,但属性名称应该是相同的。 – OscarRyz 2008-12-17 21:54:34

+0

良好的通话 - 这工作。谢谢! – lucas 2008-12-17 22:13:00

+0

让我把它当作答案:) – OscarRyz 2008-12-17 22:24:47

回答

5

以下是一种可能的解决方法:如果您将其命名为dateofbirth DB中的列将被命名为类似名称,但属性名称应该相同。

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

我以前有过这个问题。我使用了列名“employeename”,“employeerole”,“departmentlocation”中没有空格的传统列。我讨厌它,因为我所有的bean属性都必须没有骆驼大小写。

用“_”分隔的数据库列将用于正确地使用camelCase,正如您刚才所看到的那样。

0

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

+0

我不这么认为?至少,我可以在实例变量级别指定类似长度的东西,并且它们将相应地更改列。 – lucas 2008-12-17 21:38:49

+0

您可以注释其中任何一个,但必须始终对其进行注释。如果你将它们混合并注释了一些标题和一些getters,它会找到一个并忽略另一个。 – 2015-12-05 11:04:51

6

将@Column批注上,吸气:

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

这对我有用 – chaostheory 2012-06-19 01:49:50

1

您可以标注字段或getter方法,它不会有所作为。你可以发布完整的hibernate.cfg.xml或persistence.xml文件吗?

1

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

+0

你是说你唯一的改变是在大写? – 2008-12-17 22:24:15

22

仅供参考:插入下划线的原因可能是因为您使用的是ImprovedNamingStrategy。它设置在您的Configuration对象上。例如,请参阅here ...

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

4

ImprovedNamingStrategy有方法addUnderscores(),它是由表名()和列名()称为 你可以实现自己的命名策略类,并覆盖这些按您选择

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 
     } 
    } 
2

尝试把这个在

application.properties

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

下面添加属性春季开机的情况下。

spring.jpa.hibernate.naming.implicit策略= org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical策略= org.hibernate.boot.model.naming .PhysicalNamingStrategyStandardImpl