Я хочу иметь возможность задавать стратегию именования для внешних ключей, в настоящее время ключи называются как FK_qsp8qs9j1wbh965jtxfbu2q2u
, и я хотел бы генерировать имена как FK_TABLE1_TABLE2
Я написал следующую стратегию именования:
@Component
public class CustomImplicitNamingStrategy extends SpringImplicitNamingStrategy {
@Override
public Identifier determineForeignKeyName(ImplicitForeignKeyNameSource source) {
Identifier userProvidedIdentifier = source.getUserProvidedIdentifier();
if (userProvidedIdentifier != null) {
return userProvidedIdentifier;
}
String foreignKey = format("FK_%s_%s", source.getTableName().getText(), source.getReferencedTableName().getText());
return Identifier.toIdentifier(foreignKey);
}
}
application.properties
spring.jpa.hibernate.naming.implicit-strategy=foo.bar.CustomImplicitNamingStrategy
liquibase.properties
referenceUrl=hibernate:spring:foo.bar.model?dialect=org.hibernate.dialect.Oracle10gDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=foo.bar.CustomImplicitNamingStrategy
pom.xml
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Liquibase plugin configuration -->
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<referenceUrl>
hibernate:spring:foo.bar.model?dialect=org.hibernate.dialect.Oracle10gDialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=foo.bar.CustomImplicitNamingStrategy
</referenceUrl>
<propertyFile>${project.basedir}/src/main/resources/liquibase.properties</propertyFile>
<diffChangeLogFile>
${project.basedir}/src/main/resources/db/changelogs/${maven.build.timestamp}_changelog.xml
</diffChangeLogFile>
<changeLogFile>
${project.basedir}/src/main/resources/db/changelogs/db.changelog-master.xml
</changeLogFile>
<logging>info</logging>
</configuration>
<dependencies>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate4</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.7.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.198</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
Кажется, что независимо от конфигурации, жидкостьбаза возвращается к ImplicitNamingStrategyJpaCompliantImpl
и игнорирует пользовательскую.