【问题标题】:How to set Hibernate naming strategy in Spring Data JPA如何在 Spring Data JPA 中设置 Hibernate 命名策略
【发布时间】:2016-01-26 09:10:34
【问题描述】:

我使用 Spring Data JPA 并使用多个数据库,所以我必须自己配置而不是使用 @HibernateJpaAutoConfiguration

public class TesterDbConfig {

    @Autowired(required = false)
    private PersistenceUnitManager persistenceUnitManager;


    @Bean
    public JpaProperties testerJpaProperties() {
        JpaProperties jpaProperties = new JpaProperties();
        return jpaProperties;
    }

    @Bean
    @Primary
    @ConfigurationProperties(prefix = "datasource.primary")
    public DataSource testerDataSource() {
        return (DataSource) DataSourceBuilder.create().type(DataSource.class).build();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean testerEntityManager(
        JpaProperties testerJpaProperties) {
        EntityManagerFactoryBuilder builder = createEntityManagerFactoryBuilder(testerJpaProperties);
        return builder.dataSource(testerDataSource()).packages(Cabang.class).persistenceUnit("primary")
            .build();
    }

    @Bean
    public JpaTransactionManager testerTransactionManager(EntityManagerFactory testerEntityManager) {
        return new JpaTransactionManager(testerEntityManager);
    }

    private EntityManagerFactoryBuilder createEntityManagerFactoryBuilder(
        JpaProperties testerJpaProperties) {
        JpaVendorAdapter jpaVendorAdapter = createJpaVendorAdapter(testerJpaProperties);
        return new EntityManagerFactoryBuilder(jpaVendorAdapter, testerJpaProperties,
            this.persistenceUnitManager);
    }

    private JpaVendorAdapter createJpaVendorAdapter(JpaProperties testerJpaProperties) {
        AbstractJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setShowSql(testerJpaProperties.isShowSql());
        adapter.setDatabase(testerJpaProperties.getDatabase());
        adapter.setDatabasePlatform(testerJpaProperties.getDatabasePlatform());
        adapter.setGenerateDdl(testerJpaProperties.isGenerateDdl());
        return adapter;
    }
}

这样,每次创建模型时,我都必须在每个变量中使用@Column,因为在我的数据库中,我使用蛇形大小写,但在模型类中,我使用骆驼形大小写。

如何设置 Hibernate 命名策略?

【问题讨论】:

    标签: spring hibernate spring-data-jpa


    【解决方案1】:

    您可以通过 JpaProperties 进行设置,您已经在配置中使用了它:

    @Bean
    public JpaProperties testerJpaProperties() {
        JpaProperties jpaProperties = new JpaProperties();
        JpaProperties.Hibernate hibernate = new JpaProperties.Hibernate();
        hibernate.setNamingStrategy(SpringNamingStrategy.class);
        jpaProperties.setHibernate(hibernate);
        return jpaProperties;
    }
    

    并添加

    @Bean
    public LocalContainerEntityManagerFactoryBean testerEntityManager(
        JpaProperties testerJpaProperties) {
        EntityManagerFactoryBuilder builder = createEntityManagerFactoryBuilder(testerJpaProperties);
        return builder.dataSource(testerDataSource())
            .packages(Cabang.class)
            .persistenceUnit("primary")
            .properties(Collections.singletonMap("hibernate.ejb.naming_strategy",testerJpaProperties.getHibernate().getNamingStrategy()))
            .build();
    }
    

    【讨论】:

    • 它仍然给出错误 org.postgresql.util.PSQLException: ERROR: column ... does not exist 因为它可能没有转换为蛇形大小写。命名策略错误?还是实施?
    • 看起来除了在 JpaProperties 中设置之外,我还必须在 LocalContainerEntityManagerFactoryBean .properties(Collections.singletonMap("hibernate.ejb.naming_strategy",testerJpaProperties.getHibernate().getNamingStrategy())) 我从 link 中的示例中添加它
    猜你喜欢
    • 2015-11-16
    • 2021-09-05
    • 2019-07-05
    • 2017-03-23
    • 2020-02-02
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2020-06-06
    相关资源
    最近更新 更多