@EnableJpaRepositories 寻找哪个包?

@EnableJpaRepositories looking for which package?

我正在学习如何构建 JSF 和 Spring 集成网络应用程序。我正在使用 java config 进行配置。问题是@EnableJpaRepositories,这个注解应该放哪个包呢?该包裹包含实体 classes?或配置 class?要么?我可以把我的根包放进去让它自己搜索吗?

EnableJpaRepositories - 仅用于存储库而不用于实体或配置。此注释的主要目标是找到所有存储库。

您可以通过几种方式配置 jpa 存储库(取决于您的 peoject 中的包结构),

@EnableJpaRepositories -- 在这种情况下 spring 解析所有包以查找存储库。

@EnableJpaRepositories(basePackages="root package") -- 与 @EnableJpaRepositories

@EnableJpaRepositories(basePackages="path.to.repositories.package") -- 在这种情况下 spring 仅解析 'path.to.repositories.package' 包和子包以查找存储库。

如果你有像 com.some.path.repositoriescom.some.path.dao 这样的包结构,你可以 @EnableJpaRepositories(basePackages="com.some.path.dao or repositories")

如果你有更复杂的结构,比如 com.some.path.domain1.repositories , com.some.path.domain2.repositories .... com.some.path.domainN.repositories 您可以使用配置 @EnableJpaRepositories(basePackages="com.some.path") 或使用多组配置值配置(下一节),因为您有不同的独立包,您需要为所有子包找到顶级包并将其用作基础包。在许多情况下,为所有存储库查找最常见的 basePackages 可能与仅使用 default/root package @EnableJpaRepositories

相同

或者机智多组配置值 @EnableJpaRepositories ({ "com.some.path.domain1.repositories", "com.some.path.domain2.repositories"}) 如果你有几个包。在这不需要使用通用根包,但如果你有 10- 20 -30 个单独的包可能更好地使用通用包。

PS :@EnableJpaRepositories 具有 basePackages() 属性的别名。允许更简洁的注释声明,例如:@EnableJpaRepositories("org.my.pkg") 而不是 @EnableJpaRepositories(basePackages="org.my.pkg").