首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate Spring: spring.jpa.hibernate.ddl-auto属性不创建生成表不起作用

Hibernate Spring: spring.jpa.hibernate.ddl-auto属性不创建生成表不起作用
EN

Stack Overflow用户
提问于 2020-06-26 22:54:42
回答 1查看 449关注 0票数 0

我在Hibernate中使用Spring。我使用配置Java类配置Hibernate:

DbConfig.java

代码语言:javascript
运行
复制
@Configuration
 @EnableTransactionManagement
@EnableJpaRepositories(basePackages = "testproject", entityManagerFactoryRef = "entityManagerFactory")
 public class DbConfig {
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(getDatasource());
        entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);

        entityManagerFactoryBean.setJpaProperties(getHibernateProperties());

        entityManagerFactoryBean.setPackagesToScan("testproject");

        return entityManagerFactoryBean;
    }


    @Bean
    public DataSource getDatasource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.postgresql.Driver");
        dataSource.setUrl("jdbc:postgresql://127.0.0.1:5432/testproject");
        dataSource.setUsername("postgres");
        dataSource.setPassword("mypass");
        return dataSource;
    }

    @Bean
    public SessionFactory getSessionFactory() throws IOException {
        LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
        sessionFactoryBean.setPackagesToScan("testproject");
        //getHibernateProperties method is a private method

        sessionFactoryBean.setHibernateProperties(getHibernateProperties());
        sessionFactoryBean.setDataSource(getDatasource());
        sessionFactoryBean.afterPropertiesSet();

        return sessionFactoryBean.getObject();
    }

    @Bean(name = "transactionManager")
    public HibernateTransactionManager getTransactionManager() throws IOException {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(getSessionFactory());
        return transactionManager;
    }


    private static Properties getHibernateProperties() {
        Properties hibernateProperties = new Properties();
        hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
        hibernateProperties.put("hibernate.show_sql", false);
        hibernateProperties.put("spring.jpa.hibernate.ddl-auto", "create");

        System.out.println();
        // other properties
        return hibernateProperties;
    }
}

表的自动创建是在getHibernateProperties方法中配置的:

代码语言:javascript
运行
复制
hibernateProperties.put("spring.jpa.hibernate.ddl-auto", "create");

但是,它似乎不起作用:在我部署服务器并尝试插入一个实体之后,我得到一个错误,而数据库没有表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-26 23:19:20

属性spring.jpa.hibernate.ddl-autoorg.springframework.boot.autoconfigure.orm.jpa.JpaProperties.Hibernate类型的,它来自Spring 。但是您使用的是Spring

使用hibernate.hbm2ddl.auto代替。

再读

  • in Spring Boot Reference

这是可以工作的属性代码:

代码语言:javascript
运行
复制
   @Bean
    private static Properties getHibernateProperties() {
        Properties hibernateProperties = new Properties();
        hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
        hibernateProperties.put("hibernate.show_sql", true);
        hibernateProperties.put( "hibernate.hbm2ddl.auto", "create-drop");
        return hibernateProperties;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62603922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档