@Column(name="DateOfBirth")
private Date dateOfBirth;
我特别需要上面的代码来创建一个名为“DateOfBirth”的列,而不是Hibernate给我一个名为date_of_birth的列。我该如何改变这一点?有没有web.xml属性?我遇到了DefaultNamingStrategy和ImprovedNamingStrategy,但不知道如何指定一个或另一个。hibernate列名问题
@Column(name="DateOfBirth")
private Date dateOfBirth;
我特别需要上面的代码来创建一个名为“DateOfBirth”的列,而不是Hibernate给我一个名为date_of_birth的列。我该如何改变这一点?有没有web.xml属性?我遇到了DefaultNamingStrategy和ImprovedNamingStrategy,但不知道如何指定一个或另一个。hibernate列名问题
以下是一种可能的解决方法:如果您将其命名为dateofbirth
DB中的列将被命名为类似名称,但属性名称应该相同。
Hibernate采用驼峰格式来创建/读取数据库列。
我以前有过这个问题。我使用了列名“employeename”,“employeerole”,“departmentlocation”中没有空格的传统列。我讨厌它,因为我所有的bean属性都必须没有骆驼大小写。
用“_”分隔的数据库列将用于正确地使用camelCase,正如您刚才所看到的那样。
我不是100%确定,但是你不需要注释get方法而不是私有变量吗?
我不这么认为?至少,我可以在实例变量级别指定类似长度的东西,并且它们将相应地更改列。 – lucas 2008-12-17 21:38:49
您可以注释其中任何一个,但必须始终对其进行注释。如果你将它们混合并注释了一些标题和一些getters,它会找到一个并忽略另一个。 – 2015-12-05 11:04:51
将@Column批注上,吸气:
@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}
这对我有用 – chaostheory 2012-06-19 01:49:50
您可以标注字段或getter方法,它不会有所作为。你可以发布完整的hibernate.cfg.xml或persistence.xml文件吗?
建议的解决方法是使用@Column(name =“dateofbirth”),它适用于我的目的。
你是说你唯一的改变是在大写? – 2008-12-17 22:24:15
仅供参考:插入下划线的原因可能是因为您使用的是ImprovedNamingStrategy。它设置在您的Configuration对象上。例如,请参阅here ...
如果您不想使用下划线,则可以不设置命名策略,或将其设置为您之前发现的DefaultNamingStrategy。
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
}
}
尝试把这个在
application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
下面添加属性春季开机的情况下。
spring.jpa.hibernate.naming.implicit策略= org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical策略= org.hibernate.boot.model.naming .PhysicalNamingStrategyStandardImpl
可能的工作量。如果你将它命名为dateofbirth,那么DB中的列将被命名为这样,但属性名称应该是相同的。 – OscarRyz 2008-12-17 21:54:34
良好的通话 - 这工作。谢谢! – lucas 2008-12-17 22:13:00
让我把它当作答案:) – OscarRyz 2008-12-17 22:24:47