【发布时间】:2020-10-21 06:50:43
【问题描述】:
我在 JBoss 6.4 中部署的 WAR 中有一个 Spring Boot 应用程序 (1.5.9)。 我想使用自定义命名策略,但属性(和注释)被完全忽略。我的应用启动器:
@SpringBootApplication
@ComponentScan
public class CedulasApiApplication extends SpringBootServletInitializer {
private static final String DATASOURCE_JNDI_NAME = "java:/ONLINE";
public static void main(String[] args) {
SpringApplication.run(CedulasApiApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(CedulasApiApplication.class);
}
@Bean
public DataSource dataSource() {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
return dsLookup.getDataSource(DATASOURCE_JNDI_NAME);
}
}
我的自定义命名类:
public class CustomPhysicalNamingStrategy implements PhysicalNamingStrategy, Serializable {
public static final CustomPhysicalNamingStrategy INSTANCE = new CustomPhysicalNamingStrategy();
@Override
public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}
@Override
public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}
@Override
public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
return capitalize(name);
}
private Identifier capitalize(Identifier name) {
if (name == null)
return null;
if (name.isQuoted())
return name;
String text = name.getText().toUpperCase();
return Identifier.toIdentifier(text);
}
}
在我的 application.properties 中,我已将我找到的所有可能的属性放入:
spring.jpa.hibernate.naming.physical-strategy=com.app.CustomPhysicalNamingStrategy
spring.jpa.properties.hibernate.physical_naming_strategy=com.app.database.CustomPhysicalNamingStrategy
org.springframework.boot.orm.jpa.SpringNamingStrategy=com.app.database.CustomPhysicalNamingStrategy
hibernate.physical_naming_strategy=com.app.database.CustomPhysicalNamingStrategy
@Table(name="...") 和 CustomPhysicalNamingStrategy 等实体注释会被忽略,不会出现任何错误。
有什么想法吗?
【问题讨论】:
-
您是自己配置
EntityManagerFactory还是使用自动配置?spring.jpa.properties.hibernate.physical_naming_strategy应该是您的 Spring Boot 版本的正确选项。 (其他人不是)。如果您可以升级到 2.x 版本,那么您只需将您的策略定义为一个 bean 就更容易了,它将被使用。我也想知道你是否也应该指定`ImplicitNamingStrategy`。 -
不,我没有配置实体管理器,由于 JBoss 版本,我无法升级到 2.x。
标签: spring-boot hibernate spring-data-jpa