提问人:lucas 提问时间:12/18/2008 更新时间:10/3/2023 访问量:62011
Hibernate 列名问题
hibernate column name issues
问:
@Column(name="DateOfBirth")
private Date dateOfBirth;
我特别需要上面的代码来创建一个名为“DateOfBirth”的列,而不是 Hibernate 给我一个名为 date_of_birth 的列。我怎样才能改变这一点?是否有 web.xml 属性?我遇到了 DefaultNamingStrategy 和 ImprovedNamingStrategy,但不确定如何指定其中一个。
答:
我不是 100% 确定,但是您不需要注释 get 方法而不是私有变量吗?
评论
将 @Column 注解放在 getter 上:
@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}
您可以注释字段或 getter 方法,这没有区别。你能发布你的完整休眠.cfg.xml或持久性.xml文件吗?
建议的解决方法是使用 @Column(name=“dateofbirth”),这适用于我的目的。
评论
这里有一个可能的解决方法:如果你命名它,数据库中的列将像这样命名,但属性名称应该相同。dateofbirth
Hibernate 采用驼峰大小写格式来创建/读取数据库列。
我以前遇到过这个问题。我使用的旧列名称“employeename”、“employeerole”、“departmentlocation”中没有空格。我讨厌它,因为我所有的豆子属性都必须没有骆驼壳。
如您刚才所看到的,以“_”分隔的数据库列将用于正确 camelCase。
仅供参考:插入下划线的原因可能是因为您使用的是 ImprovedNamingStrategy。它是在 Configuration 对象上设置的。有关示例,请参阅此处...
如果你不需要下划线,你可以不设置命名策略,或者将其设置为你之前发现的 DefaultNamingStrategy。
评论
ImprovedNamingStrategy 具有从 tableName() 和 columnName() 调用的 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 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
评论
我遇到了类似的问题,将以下两个属性添加到我的application.properties解决了我的问题:。spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
评论