Автор оригинала: Vlad Mihalcea.
Вступление
В этой статье я собираюсь показать вам, как работает стратегия Hibernate PhysicalNamingStrategy и как вы можете использовать ее для настройки сопоставления по умолчанию между атрибутами сущностей и идентификаторами базы данных.
Зимняя спячка Стратегия физического именования
Начиная с версии 5, Hibernate предлагает интерфейс PhysicalNamingStrategy
для настройки сопоставления атрибутов сущностей и идентификаторов базы данных.
Интерфейс Hibernate PhysicalNamingStrategy
выглядит следующим образом:
Методы Hibernate PhysicalNamingStrategy
позволяют настраивать соглашения об именах по умолчанию для следующих идентификаторов базы данных:
toPhysicalCatalogName
– настройка соглашения об именовании каталога базы данных по умолчаниюtoPhysicalSchemaName
– настройка соглашения об именовании схемы базы данных по умолчаниюtoPhysicalTableName
– настройка соглашения об именовании таблиц базы данных по умолчаниюtoPhysicalSequenceName
– настройка соглашения об именовании последовательностей баз данных по умолчаниюtoPhysicalColumnName
– настройка соглашения об именовании столбцов таблицы базы данных по умолчанию
По умолчанию реализацией интерфейса PhysicalNamingStrategy
является стандартный класс PhysicalNamingStrategy, включающий
.
Настройка физической именнойстратегии Hibernate
Если вы хотите предоставить сопоставление camelCase по умолчанию для snake_case между атрибутами сущности Java и идентификаторами базы данных, вы можете создать следующую CamelCaseToSnakeCaseNamingStrategy
, которая расширяет класс по умолчанию PhysicalNamingStrategyStandardImpl
и определяет новые правила сопоставления по умолчанию:
public class CamelCaseToSnakeCaseNamingStrategy extends PhysicalNamingStrategyStandardImpl { public static final String CAMEL_CASE_REGEX = "([a-z]+)([A-Z]+)"; public static final String SNAKE_CASE_PATTERN = "$1\\_$2"; @Override public Identifier toPhysicalCatalogName( Identifier name, JdbcEnvironment context) { return formatIdentifier( super.toPhysicalCatalogName(name, context) ); } @Override public Identifier toPhysicalSchemaName( Identifier name, JdbcEnvironment context) { return formatIdentifier( super.toPhysicalSchemaName(name, context) ); } @Override public Identifier toPhysicalTableName( Identifier name, JdbcEnvironment context) { return formatIdentifier( super.toPhysicalTableName(name, context) ); } @Override public Identifier toPhysicalSequenceName( Identifier name, JdbcEnvironment context) { return formatIdentifier( super.toPhysicalSequenceName(name, context) ); } @Override public Identifier toPhysicalColumnName( Identifier name, JdbcEnvironment context) { return formatIdentifier( super.toPhysicalColumnName(name, context) ); } private Identifier formatIdentifier( Identifier identifier) { if (identifier != null) { String name = identifier.getText(); String formattedName = name.replaceAll( CAMEL_CASE_REGEX, SNAKE_CASE_PATTERN ).toLowerCase(); return !formattedName.equals(name) ? Identifier.toIdentifier( formattedName, identifier.isQuoted() ) : identifier; } else { return null; } } }
Если вы хотите использовать camelCase для стратегии именования snake_case, вам не нужно создавать стратегию CamelCaseToSnakeCaseNamingStrategy
, поскольку вы можете получить ее через проект Типы гибернации .
Регистрация пользовательской физической именнойстратегии гибернации
Если вы используете Spring Boot, вы можете зарегистрировать гибернацию клиента PhysicalNamingStrategy
с помощью свойства конфигурации hibernate.physical_naming_strategy
Hibernate:
spring.jpa.properties.hibernate.physical_naming_strategy=com.vladmihalcea.hibernate.type.util.CamelCaseToSnakeCaseNamingStrategy
Или, если вы используете Java EE или Jakarta EE, вы можете предоставить стратегию физического именования Hibernate через persistence.xml
файл свойств:
Вывод
Интерфейс Hibernate PhysicalNamingStrategy
и свойство конфигурации hibernate.physical_naming_strategy
позволяют настраивать сопоставление между идентификаторами объектов Java и баз данных.
Поэтому стратегия Hibernate PhysicalNamingStrategy полезна для определения стратегий сопоставления по умолчанию, как пример Java camel для сопоставления базы данных snake_case. Для получения более подробной информации о типах гибернации От camelCase До Стратегии именования случаев Змеи
класс, ознакомьтесь также с этой статьей .