Как перенести Hibernate NamingStrategy в (Implicit | Physical) NamingStrategy? Где документация?
NamingStrategy
уже отмечался как устаревший в Hibernate 4.2/4.3 (HHH-7079). Начиная с Hibernate 5, теперь он будет поставляться с двумя интерфейсами замены (?) ImplictNamingStrategy
и PhysicalNamingStrategy
(HHH-7078) и наконец, отбросил поддержку старого NamingStrategy
. Именно поэтому поддержка Spring предстоящего Hibernate5 даже удалила конфигуратор namingStrategy()
и пользу implicitNamingStrategy()
и physicalNamingStrategy()
. Пока что так хорошо.
Хотя он упоминается в некоторых документах (т.е. в неполном working-5.0-migration-guide.md) и в (сгенерированных) выпусках для предстоящего спящего режима 5 (на сегодняшний день), я не нашел конкретного примера, как использовать их на самом деле.
Возможно, я что-то пропустил, но ни JavaDoc, ни проблемы не показывают никаких доказательств идеи обоих типов стратегий. Кроме того, у меня уже есть одна стратегия, основанная на NamingStrategy
: пользовательский OracleNamingStrategy
, основанный на ImprovedNamingStrategy больше не работает в Hibernate 5
Ответы
Ответ 1
Поместите ниже пара значений ключа в конфигурационный файл hibernate
hibernate.implicit_naming_strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
hibernate.physical_naming_strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Ответ 2
Если вы предоставляете аннотации @Table и @Column в ваших классах сущностей с именами, снабженными подчеркиванием, например, user_id т.е. @Column (name = "user_id"), он займет столбец имя как user_id; если вы дадите ему идентификатор пользователя, он изменится на user_id, если вы не используете стратегию или неявную стратегию (в частности, spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
). Итак, если вам нужна стратегия, в которой имя атрибута сущности изменяется на имя с символами подчеркивания и строчными буквами, то есть с userId до user_id, вам следует использовать неявную или не использовать стратегию (которая на самом деле использует неявная стратегия).
Если вы не хотите, чтобы ваша стратегия именования добавляла подчеркивание к имени столбца или имени класса, то стратегия, которую вам нужно использовать, будет выглядеть следующим образом:
spring.jpa.hibernate.naming.physical-стратегия = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl. Вещи, которые вы указываете в аннотациях @Table
и @Columns
name, останутся без изменений.
Если вы не хотите предоставлять аннотации и хотите вручную обрабатывать имя таблицы и имена столбцов, вы должны расширить класс org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
и переопределить необходимые методы. Если вы все еще используете аннотации для некоторых случаев здесь, помните, что переопределенные методы будут применяться к именам, написанным в этих аннотациях.
spring.jpa.hibernate.naming.physical-стратегия = example.CustomStrategy