Spring Boot 1.5中spring.jpa.hibernate.ddl-auto=create不生效无法自动建表
Spring Boot 1.5
spring.jpa.hibernate.ddl-auto=create 配置不生效解决方案 1 修复配置文件中的已知错误
- 数据源驱动类拼写错误
当前配置中datasource.dev.driverClassName=com.mysql.jdbc.Drive存在拼写错误,正确值应为com.mysql.jdbc.Driver(末尾需补字母r) - Profile配置文件命名不符合规范
Spring Boot默认的环境配置文件命名规则为application-{profile名称}.properties,你当前的dev环境配置命名为application.dev.properties,使用点分隔而非横杠,会导致激活dev profile时配置文件无法被正常加载。 - 数据源配置前缀不匹配
Spring Boot 1.5默认读取的数据源配置前缀为spring.datasource,你当前使用datasource.dev为前缀的自定义数据源,若未做额外手动配置,JPA无法识别绑定到该数据源,自然不会执行建表逻辑。
如果要保留自定义前缀,需要手动配置数据源、实体管理工厂、事务管理器三个核心Bean,同时将你配置的props.hb开头的hibernate属性手动注入到实体管理配置中,参考代码如下:
@Configuration @EnableTransactionManagement @EnableJpaRepositories( basePackages = "你的Repository接口所在包路径", entityManagerFactoryRef = "devEntityManagerFactory", transactionManagerRef = "devTransactionManager" ) public class DevDataSourceConfig { @Bean @ConfigurationProperties(prefix = "datasource.dev") public DataSource devDataSource() { return DataSourceBuilder.create().build(); } @Bean public LocalContainerEntityManagerFactoryBean devEntityManagerFactory(EntityManagerFactoryBuilder builder) { Map<String, Object> hibernateProps = new HashMap<>(); // 手动注入hibernate相关配置 hibernateProps.put("hibernate.default_batch_fetch_size", 1000); hibernateProps.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); hibernateProps.put("hibernate.temp.use_jdbc_metadata_defaults", false); hibernateProps.put("hibernate.hbm2ddl.auto", "create"); return builder .dataSource(devDataSource()) .packages("你的Entity实体类所在包路径") .properties(hibernateProps) .persistenceUnit("devPersistenceUnit") .build(); } @Bean public PlatformTransactionManager devTransactionManager(@Qualifier("devEntityManagerFactory") EntityManagerFactory entityManagerFactory) { return new JpaTransactionManager(entityManagerFactory); } }
2 检查实体类配置规则
- 所有需要自动建表的实体类必须添加
@Entity注解,主键字段必须添加@Id注解 - 实体类必须放在上文
@EnableJpaRepositories注解配置的packages扫描路径下,或是启动类(标注了@SpringBootApplication的类)的同包/子包下,否则JPA无法识别到实体类,不会生成建表语句。
3 排查配置覆盖问题
- 不要同时配置
spring.jpa.generate-ddl和hibernate.hbm2ddl.auto,二者功能重叠,仅保留hibernate.hbm2ddl.auto=create即可,同时配置可能出现冲突。 - 确认启动项目时没有通过启动参数、系统环境变量等其他方式覆盖了
ddl-auto的配置值。
4 开启日志定位问题
在配置文件中添加如下日志配置,打印Hibernate的执行细节:
logging.level.org.hibernate.SQL=debug logging.level.org.hibernate.tool.hbm2ddl=trace
启动项目后查看日志:如果有建表语句输出但数据库无表,检查数据库用户是否有建表权限,或是schema配置错误;如果无建表语句输出,说明JPA未扫描到实体类或配置未生效。
内容的提问来源于stack exchange,提问作者arj
相关产品推荐
相关产品推荐

