Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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 HibernateeException:缺少列:名称错误_Java_Spring_Hibernate_Hibernate Mapping_Naming - Fatal编程技术网

Java HibernateeException:缺少列:名称错误

Java HibernateeException:缺少列:名称错误,java,spring,hibernate,hibernate-mapping,naming,Java,Spring,Hibernate,Hibernate Mapping,Naming,在我的Java代码中,我有一个名为isNegative的字段,数据库中有一个类似的列。但是Hibernate坚持名称应该是否定的,即使使用@Column强制名称也是如此 错误: 原因:org.hibernate.HibernateException:缺少列: datasource.item中的_是否为负数 Application.properties: #JPA spring.data.jpa.repositories.enabled=false spring.jpa.database=mysq

在我的Java代码中,我有一个名为isNegative的字段,数据库中有一个类似的列。但是Hibernate坚持名称应该是否定的,即使使用@Column强制名称也是如此

错误:

原因:org.hibernate.HibernateException:缺少列: datasource.item中的_是否为负数

Application.properties:

#JPA
spring.data.jpa.repositories.enabled=false
spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.open-in-view=true
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.hibernate.use-new-id-generator-mappings=false
spring.jpa.properties.hibernate.event.merge.entity_copy_observer=allow
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext

这是由于您的配置,因为您正在将spring.jpa.hibernate.naming.physical-strategy设置为PhysicalNamingStrategyStandardImpl,它将使用下划线作为名称

如果您检查,您可以看到:

Hibernate使用两种不同的命名策略将名称从对象模型映射到相应的数据库名称。可以通过分别设置spring.jpa.hibernate.naming.physical-strategy和spring.jpa.hibernate.naming.implicit-strategy属性来配置物理和隐式策略实现的完全限定类名。或者,如果隐式NamingStrategy或物理NamingStrategy bean在应用程序上下文中可用,则Hibernate将自动配置为使用它们

默认情况下,Spring Boot将物理命名策略配置为 SpringPhysicalNamingStrategy。此实现提供了相同的功能 表结构为Hibernate 4:所有点都替换为下划线 驼峰形的外壳也被下划线所取代。默认情况下,所有 表名以小写形式生成,但可以 如果架构需要,请覆盖该标志

要解决此问题,您需要删除此属性并改用默认命名策略:

spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultNamingStrategy

您需要spring.jpa.hibernate.naming.physical-strategy和spring.jpa.hibernate.naming.implicit-strategy

添加以下内容

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可能会有所帮助。这个解决方案可以在Hibernate5中使用


希望有帮助。

请查看以下我的分析:

如果不希望命名策略在列名或类名中添加下划线,则需要使用的策略如下:spring.jpa.hibernate.naming.physical strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl。注释@Table和@Column的name属性中提供的内容将保持原样。例如,实体中的firstName属性将获得一个列名作为firstName,即没有更改


如果不希望提供注释,并且希望手动处理表名和列名,则应扩展类org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl并重写所需的方法。如果您仍然在这里的某些情况下使用注释,请记住,重写的方法将应用于在这些注释中编写的名称。spring.jpa.hibernate.naming.physical strategy=example.CustomStrategy

如果您同时使用hibernate和spring Framework,是否可以显示文件hibernate.cfg.xml或application.properties,如果您将hibernate用作jpa实现,是否可以显示文件hibernate.cfg.xml或application.properties?可能完全重复@Arnaud;但问题是缓解措施不起作用。我将命名策略设置为physicalNamingStrategyStandard;但它不起作用。写@columnname=的变通方法是否定的;但是对于我所有的列名,这样做太多了。谢谢,解决方案是什么?不要使用spring.jpa.hibernate.naming strategy=org.hibernate.cfg.DefaultNamingStrategy,而是检查我的编辑。
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl