首页 > 解决方案 > 使用 Spring Boot 和 Spring JPA 时 - 为什么我不能为依赖的实体生成模式?

问题描述

我有一个使用 spring-boot-starter-jpa 的 Spring Boot maven 项目,我一直在使用它为内存中的 h2 数据库自动生成数据库表以进行集成测试。

在我将 @Entity 类重构为一个单独的 maven 模块以实现跨其他两个项目的重用之前,这非常有效。

一旦 Entity 类作为 maven 依赖项而不是在同一个模块中,表创建将不再有效。我在 application.properties feil@ 中有以下内容

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.h2.console.enabled=true
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create

Spring 能够注入 @Repository 类,它们是标准的 CrudRepository 接口。

我已将我的应用程序类更改为:

@SpringBootApplication
@EnableJpaRepositories("com.acme.mypackage")

依赖项中包含的 @Entity 类位于 com.acme.mypackage 包中。这没有奏效。

在启动应用程序后使用 h2 控制台时,我可以看到来自依赖项的实体的表没有被创建。

如何让 Spring Boot 自动为 Maven 依赖项中包含的 @Entity 类生成数据库表?

标签: springmavenspring-bootspring-data-jpadependencies

解决方案


您必须使用 @EntityScan 告诉 Spring Data JPA 您的实体位于不同的包中:

@SpringBootApplication
@EntityScan ("com.acme.mypackage")

请在此处找到官方文档:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-separate-entity-definitions-from-spring-configuration

如果您的存储库位于 SpringBootApplication 类所在的路由层次结构下方,则必须使用带有包名称的 @EnableJpaRepositories。


推荐阅读