В моем коде Java есть поле с именем isNegative с аналогичным столбцом, существующим в базе данных. Но Hibernate настаивает на том, чтобы имя было is_negative, даже с принудительным использованием имени @Column.
@Column(name = "isNegative")
private boolean isNegative;
Ошибка:
Caused by: org.hibernate.HibernateException: Missing column: is_negative in 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
Возможный дубликат проблемы с именем столбца в спящем режиме
@Arnaud Да, полностью; но дело в том, что смягчение не работает. Я установил стратегию именования PhysicalNamingStrategyStandard; но это не работает. Обходной путь (написание @column (name = "isnegative")) работает; но это слишком много для всех моих имен столбцов.




Это связано с вашей конфигурацией, потому что вы устанавливаете spring.jpa.hibernate.naming.physical-strategy на PhysicalNamingStrategyStandardImpl, который будет использовать символы подчеркивания для имен.
Если вы проверите Раздел Настроить стратегию именования Hibernate в Spring Docs, вы увидите, что:
Hibernate uses two different naming strategies to map names from the object model to the corresponding database names. The fully qualified class name of the physical and the implicit strategy implementations can be configured by setting the
spring.jpa.hibernate.naming.physical-strategyandspring.jpa.hibernate.naming.implicit-strategyproperties, respectively. Alternatively, ifImplicitNamingStrategyorPhysicalNamingStrategybeans are available in the application context, Hibernate will be automatically configured to use them.By default, Spring Boot configures the physical naming strategy with
SpringPhysicalNamingStrategy. This implementation provides the same table structure as Hibernate 4: all dots are replaced by underscores and camel casing is replaced by underscores as well. By default, all table names are generated in lower case, but it is possible to override that flag if your schema requires it.
Чтобы решить эту проблему, вам нужно удалить это свойство и вместо этого использовать стратегию именования по умолчанию:
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultNamingStrategy
Спасибо, какое решение?
Не используйте spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultNamingStrategy, вместо этого проверьте мой Edit.
Вам понадобятся 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 может помочь. Это решение будет работать в спящем режиме 5.
Надеюсь, поможет.
Пожалуйста, ознакомьтесь с моим анализом:
Если вы не хотите, чтобы ваша стратегия именования добавляла подчеркивание к имени столбца или имени класса, тогда стратегия, которую вам нужно использовать, будет выглядеть так: spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl. То, что вы предоставляете в аннотациях @Table и атрибут имени @Column’s, останется без изменений. Например. Атрибут имя в сущности получит имя столбца как имя, то есть без изменений.
Если вы не хотите предоставлять аннотации и хотите вручную обрабатывать имя таблицы и имена столбцов, вам следует расширить класс org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl и переопределить необходимые методы. Если вы все еще используете аннотации для некоторых случаев, помните, что переопределенные методы будут применяться к именам, написанным в этих аннотациях. spring.jpa.hibernate.naming.physical-strategy=example.CustomStrategy
Можете ли вы показать файл
hibernate.cfg.xmlилиapplication.properties, если вы используете Hibernate и Spring Framework вместе, илиpersistence.xml, если вы используете Hibernate в качестве реализации JPA?