Java hibernate列名问题
我特别需要上面的代码来创建一个名为“DateOfBirth”的列,而Hibernate给了我一个名为date OfBirth的列。我怎样才能改变这个?是否存在web.xml属性?我遇到了DefaultNamingStrategy和ImprovedNamingStrategy,但不确定如何指定其中一个。我不是100%确定,但您不需要注释get方法而不是私有变量吗?将@Column注释放在getter上:Java hibernate列名问题,java,hibernate,annotations,Java,Hibernate,Annotations,我特别需要上面的代码来创建一个名为“DateOfBirth”的列,而Hibernate给了我一个名为date OfBirth的列。我怎样才能改变这个?是否存在web.xml属性?我遇到了DefaultNamingStrategy和ImprovedNamingStrategy,但不确定如何指定其中一个。我不是100%确定,但您不需要注释get方法而不是私有变量吗?将@Column注释放在getter上: @Column(name="DateOfBirth") private Date dateOf
@Column(name="DateOfBirth")
private Date dateOfBirth;
您可以对字段或getter方法进行注释,这没有什么区别。您可以发布完整的hibernate.cfg.xml或persistence.xml文件吗?建议的解决方法是使用@Column(name=“dateofbirth”),这对我来说很有用。这里有一个可能的解决方法:如果您将其命名为
dateofbirth
,则数据库中的列将这样命名,但属性名称应该相同
Hibernate采用camel case格式来创建/读取数据库列
我以前有过这个问题。我使用的是一个遗留列,列名称“employeename”、“employeerole”、“departmentlocation”中没有空格。我讨厌它,因为我所有的bean属性都必须没有camel case
正如您刚才所看到的,用“u”分隔的数据库列将用于正确区分大小写。仅供参考:插入下划线的原因可能是因为您使用了。它设置在你的对象上。请参阅以获取示例
如果您不需要下划线,您可以不设置命名策略,或者将其设置为您之前发现的DefaultNamingStrategy。改进的NamingStrategy具有从tableName()和columnName()调用的addParallers()方法 您可以实现自己的命名策略类,并根据自己的选择覆盖它们
@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}
试着把这个放进去
应用程序属性
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
}
}
在spring引导的情况下添加以下属性 spring.jpa.hibernate.naming.implicit strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical strategy=org.hibernate.boot.model.naming.physicalnamingstrategstandardimpl我不这么认为?至少,我可以在实例变量级别指定诸如长度之类的内容,它们将相应地更改列..您可以对其中任何一个进行注释,但必须一致地对它们进行注释。如果您混合使用它们并注释一些标题和一些getter,它将找到其中一个而忽略另一个。可能的工作已完成。如果您将其命名为dateofbirth,DB中的列将这样命名,但属性名称应该相同。让我把它作为一个答案:)您是说您所做的唯一更改是大写字母?是的。似乎肇事者是ImprovedNamingStrategy,它看到camelcase列名并将其转换为小写+下划线。错误或功能,由你决定。我建议对任何不需要特殊约定的表名也调用“超级(表名)”。。。也许正是这个问题的原因。对我来说很有魅力。谢谢,它真的帮助了我。你能提供一些链接来看看我在使用DefaultNamingStrategy而不是改进的策略时会缺少什么吗?这曾经是有效的,但自从SpringBoot2(2.0.4)和Hibernate5.2(5.2.17)之后就不再有效了。我调试了整个hibernate,命名策略实际上没有干扰,但其他一些hibernate魔术随后进行转换,向camlCase属性添加下划线。这真的很糟糕,尤其是一个显式的@Column(name=“nameWithCamlCase”)没有帮助,hibernate仍然认为它比开发人员想要的更聪明。我想是最新的JPA合规问题导致了这种疯狂。
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl