Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate列名问题_Java_Hibernate_Annotations - Fatal编程技术网

Java hibernate列名问题

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

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

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

将@Column注释放在getter上:

@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