@n199a
Java

Почему не работает заданная Naming Strategy в Spring Boot?

Использую Spring Boot + Hibernate.
В application.properties указал использовать PhysicalNamingStrategy:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Данная стратегия подразуевает:
- все точки заменяются символами подчеркивания
- регистр camelCase заменяется также подчеркиванием
- по умолчанию все имена таблиц создаются в нижнем регистре. Например, объект TelephoneNumber отображается в таблицу phone_number.

Есть entity Java класс с именем GiftCertificate. Но при выполнении запроса почему-то имя данного класса преобразуется не в gift_certificate, как ожидается мной, а в giftcertificate, что видно из логов:
java.sql.SQLSyntaxErrorException: Table 'gift_certificates_system_db.giftcertificate' doesn't exist


Почему такое происходит и как это исправить?
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
@n199a Автор вопроса
Java
ImplicitNamingStrategyиспользуется, когда явно не указывается имя базы данных, имя таблицы, имя столбца в определении сущности. Т.е. когда не используется аннотация @Table или если есть аннотация @Column, но свойство name не задано.

PhysicalNamingStrategyстратегия вступае в работу, когда явно задано имя БД, имя таблицы, имя столбца, например @Column(name = "camelCase"). Вот тогда Hibernate уже будет работать со значением параметра name.

Задаются свойства в application.properties:

spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy


Мне нужно была стратегия ImplicitNamingStrategy, а не PhysicalNamingStrategy.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы