Spring Boot - используйте подчеркнутые имена таблиц и столбцов для настраиваемого источника данных - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь настроить два источника данных для проекта Spring Boot.Вот мой файл конфигурации для первичного источника данных.

@PropertySource({"classpath:application-local.properties"})
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "primaryEntityManager",
        basePackages = {"portal.api.repository"}
)
public class PrimaryDbConfig {

    @Autowired
    private Environment env;

    @Bean
    @Primary
    public LocalContainerEntityManagerFactoryBean primaryEntityManager() {
        LocalContainerEntityManagerFactoryBean em
                = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(primaryDataSource());
        em.setPackagesToScan(
                new String[]{"portal.api.model"});

        HibernateJpaVendorAdapter vendorAdapter
                = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        HashMap<String, Object> properties = new HashMap<>();
        properties.put("hibernate.hbm2ddl.auto",
                env.getProperty("app.datasource.spring.jpa.hibernate.ddl"));
        properties.put("hibernate.dialect",
                env.getProperty("hibernate.dialect"));
        em.setJpaPropertyMap(properties);

        return em;
    }

    @Primary
    @Bean
    public DataSource primaryDataSource() {

        DriverManagerDataSource dataSource
                = new DriverManagerDataSource();
        dataSource.setDriverClassName(
                env.getProperty("app.datasource.driver-class-name"));
        dataSource.setUrl(env.getProperty("app.datasource.url"));
        dataSource.setUsername(env.getProperty("app.datasource.username"));
        dataSource.setPassword(env.getProperty("app.datasource.password"));

        return dataSource;
    }

    @Primary
    @Bean
    public PlatformTransactionManager userTransactionManager() {

        JpaTransactionManager transactionManager
                = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(
                primaryEntityManager().getObject());
        return transactionManager;
    }

}

Таблицы генерируются, но их имена и имена столбцов в верблюжьем случае.Однако я хотел бы иметь имена подчеркивания, которые у весенней загрузки по умолчанию.Например, сущность ApiKey будет изменена на имя таблицы api_key.

Как настроить Spring Boot для использования стратегии именования с подчеркиванием?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Ссылка от Официальный документ

По умолчанию Spring Boot конфигурирует стратегию физического именования с помощью SpringPhysicalNamingStrategy.Эта реализация обеспечивает ту же структуру таблиц, что и Hibernate 4: все точки заменяются подчеркиванием, а верблюжий корпус также заменяется подчеркиванием.

Вы можете установить следующее свойство в application.yml, чтобы сообщить Springboot, какойИспользуемая стратегия именования:

spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
        implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl

Аналогичный пост для справки: java.sql.SQLSyntaxErrorException: неизвестный столбец .JPA Entity Issue?

0 голосов
/ 21 мая 2019

Я думаю, что если вы используете @Column (name = "api_key") в своей переменной экземпляра для вашей доменной модели, это будет работать.

например

    @Column(name = "api_key")
    private String apiKey;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...