Der richtige Tabellenname wird nicht ersetzt. Ungültiger ObjektnameJava

Java-Forum
Anonymous
 Der richtige Tabellenname wird nicht ersetzt. Ungültiger Objektname

Post by Anonymous »

Ich habe einen Start auf Spring Boot Version 2.1.6.Release -Version Java 11. Ich ersetze Tabellennamen aus application.yml < /p>
In der Statreer Die für diese verantwortliche Klasse ist: < /p>

Code: Select all

public class CustomPhysicalNamingStrategy extends PhysicalNamingStrategyStandardImpl implements PhysicalNamingStrategy {

private static Map tableNames;

public CustomPhysicalNamingStrategy(TableNamesProperties tableNamesProperties) {
tableNames = new HashMap();
tableNames.put("SpecialContingentDisease", tableNamesProperties.getSpecialContingentDisease());
tableNames.put("SpecialContingentLpu", tableNamesProperties.getSpecialContingentLpu());
tableNames.put("MkbGroup", tableNamesProperties.getMkbGroup());
tableNames.put("MkbToGroup", tableNamesProperties.getMkbToGroup());
tableNames.put("TehAtrValue", tableNamesProperties.getTehAtrValue());
tableNames.put("OmsTehAtr", tableNamesProperties.getTehAtr());

}

@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
String tableName = name.getText();
String mappedTableName = tableNames.get(tableName);
System.out.println("Mapping table: " + tableName + " -> " + mappedTableName);
if (mappedTableName == null) {
return super.toPhysicalTableName(name, context);
}
return Identifier.toIdentifier(mappedTableName);
}

@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
return name;
}
}
< /code>
Ich verwende diesen Starter in verschiedenen Microservices und einige von ihnen sind unterschiedlich, da sie mehrere Datenquellen haben, bei denen es 1 korrekt funktioniert.  Hier ist die Dienstkonfiguration: < /p>
  datasource:
url: jdbc:sqlserver://${MED_INFO_DB_IEMK_ADDRESS:111.111.1.11:11111}
username: ${MED_INFO_DB_IEMK_USERNAME:user}
password: ${MED_INFO_DB_IEMK_PASSWORD:pass}
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

jpa:
open-in-view: false

table:
names:
disease: ${DISEASE_DIRECTORY_PATH:cod.dbo.oms_mkb}

< /code>
Und wo es mehrere Datenquellen gibt, verwende ich die angegebene Konfiguration < /p>
  datasource:
jdbc-url: jdbc:sqlserver://${MED_INFO_DB_MIP_ADDRESS:111.111.1.111:11111}
username: ${MED_INFO_DB_MIP_USERNAME:1111}
password: ${MED_INFO_DB_MIP_PASSWORD:1111}
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
iemk-datasource:
jdbc-url: jdbc:sqlserver://${MED_INFO_DB_IEMK_ADDRESS:111.111.1.111:11111}
username: ${MED_INFO_DB_IEMK_USERNAME:1111}
password: ${MED_INFO_DB_IEMK_PASSWORD:1111}
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

jpa:
open-in-view: false
database-platform: org.hibernate.dialect.SQLServerDialect
hibernate:
naming:
physical-strategy: tech.reliab.special.contingent.config.CustomPhysicalNamingStrategy

table:
names:
disease: ${DISEASE_DIRECTORY_PATH:cod.dbo.oms_mkb}

< /code>
@Configuration
@Profile("!test")
@EnableJpaRepositories(
basePackages = {
"ru.tn.telemedicine.register.business.dao",
"tech.reliab.special.contingent.repository"
},
entityManagerFactoryRef = "iemkEntityManager",
transactionManagerRef = "iemkTransactionManager"
)
public class IemkDataSourceConfig {

@Bean
@ConfigurationProperties(prefix = "spring.iemk-datasource")
public DataSource iemkDataSource() {
return DataSourceBuilder.create().build();
}

@Bean
@Primary
public LocalContainerEntityManagerFactoryBean iemkEntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(iemkDataSource());
em.setPackagesToScan(
"ru.tn.telemedicine.register.business.dao",
"ru.tn.telemedicine.register.business.domain",
"tech.reliab.special.contingent.domain",
"tech.reliab.special.contingent.repository"
);
em.setPersistenceUnitName("iemk");
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap properties = new HashMap();
properties.put("hibernate.hbm2ddl.auto", "none");
properties.put("hibernate.dialect", "org.hibernate.dialect.SQLServerDialect");
properties.put("hibernate.show_sql", "true");
properties.put("hibernate.format_sql", "true");
em.setJpaPropertyMap(properties);
return em;
}

@Bean
@Primary
public PlatformTransactionManager iemkTransactionManager() {
System.out.println("Creating iemkTransactionManager");
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(iemkEntityManager().getObject());
return transactionManager;
}
}
< /code>
When you launch the application, you can see it in the logs:

TableNamesProperties: specialContingentDisease = cod.dbo.oms_mkb

Which means everything should be fine, but after the request I get an error:

2025-05-19 11:31:46.233 ERROR 26152 --- [nio-8057-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : Invalid object name 'SpecialContingentDisease'.

Here is the entity class:

@Entity
@AllArgsConstructor
@NoArgsConstructor
@Getter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class SpecialContingentDisease {
@Id
Integer mkbid;
String ds;
String name;
@Column(name = "DATE_E")
LocalDateTime dateE;
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post