当前位置: 首页 > 知识库问答 >
问题:

Spring Boot-为自定义数据源使用下划线表名和列名

壤驷向明
2023-03-14
@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;
    }

}

共有1个答案

谷梁星雨
2023-03-14

正式单据参照

默认情况下,Spring Boot使用SpringPhysicalNamingStrategy配置物理命名策略。这个实现提供了与Hibernate4相同的表结构:所有的点都被下划线替换,骆驼大小写也被下划线替换。

您可以在application.yml中设置以下属性来告诉springboot使用哪种命名策略:

spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
        implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
 类似资料:
  • 问题内容: 如何强制hibernate以生成数据库架构,以便将CamelCase转换为下划线(使用HBM)?例如。我有: 我想让hibernate创建这样的表(oracle): 我知道我可以在hbm.xml文件中使用表/列名称,但是我想在全局范围内进行设置(以节省时间和防止错误)。 问题答案: 应该正是您想要的。参见3.6。实施命名策略。

  • rank ▲ ✰ vote url 64 365 174 322 url 在实例名字前单下划线和双下划线的含义 我想刨根问底,这到底是什么意思?解释一下他俩的区别. 单下划线 在一个类中的方法或属性用单下划线开头就是告诉别的程序这个属性或方法是私有的.然而对于这个名字来说并没有什么特别的. 引自PEP-8: 单下划线:"内部使用"的弱指示器.比如,from M import * 将不会引进用但下划

  • 问题内容: 我正在使用REST服务(使用Spring引导),该服务运行批处理作业。我希望Batch仅与嵌入式数据源(用于存储元数据)一起使用,而默认数据源(在我的情况下为Postgres)将用于存储企业实体。 问题在于,Batch会在启动时尝试在默认数据源中创建元数据表(如 batch_job_execution , batch_job_instance 等)。 这是重现问题的示例配置: 批处理配

  • 我正在使用运行批处理作业的REST-service(使用Spring Boot)。我希望Batch仅适用于嵌入式数据源(存储元数据),而默认数据源(在我的例子中为Postgres)将用于存储业务实体。 问题是Batch试图在启动时在默认数据源中创建元数据表(如batch_job_execution、batch_job_instance等)。 以下是重现问题的示例配置: 批量配置 数据源配置 通过这

  • 我尝试按类名查找元素。不幸的是,我必须选择的类名包含双下划线,并引发“没有这样的元素”错误。 < code>div-element选择: 选择: 当前结果(错误): selenium . common . exceptions . nosuchelementexception:消息:没有这样的元素:找不到元素:{"method":"css selector "," selector ":"。结果列

  • 我定义了以下实体: 尽管有表注释,我还是收到。如何防止实体类(如EmailTemplate)转换为email_template表名?