Подтвердить что ты не робот

Как перенести 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

4b9b3361

Ответ 1

Поместите ниже пара значений ключа в конфигурационный файл hibernate

hibernate.implicit_naming_strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl

hibernate.physical_naming_strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Ответ 2

  1. Если вы предоставляете аннотации @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, вам следует использовать неявную или не использовать стратегию (которая на самом деле использует неявная стратегия).

  2. Если вы не хотите, чтобы ваша стратегия именования добавляла подчеркивание к имени столбца или имени класса, то стратегия, которую вам нужно использовать, будет выглядеть следующим образом: spring.jpa.hibernate.naming.physical-стратегия = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl. Вещи, которые вы указываете в аннотациях @Table и @Columns name, останутся без изменений.

  3. Если вы не хотите предоставлять аннотации и хотите вручную обрабатывать имя таблицы и имена столбцов, вы должны расширить класс org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl и переопределить необходимые методы. Если вы все еще используете аннотации для некоторых случаев здесь, помните, что переопределенные методы будут применяться к именам, написанным в этих аннотациях.

    spring.jpa.hibernate.naming.physical-стратегия = example.CustomStrategy