spring - @Repository 和 @EnableJpaRepositories 都不适用于最新的 Hibernate 和 Spring
问题描述
我正在尝试使用最新的最佳实践来启用 Hibernate。
所以我有这个:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.27.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.2</version>
</dependency>
(每个依赖项都是截至发布之日的最新版本)
和这个
@Repository
public interface UserRepository extends JpaRepository<UserInfo, Long> {
}
和这个:
@ContextConfiguration(locations = { "classpath:spring-backend-dao.xml" })
@EnableJpaRepositories("com.cth.orm")
@EntityScan("com.cth.orm")
public class UserRepositoryTest extends AbstractJUnit4SpringContextTests {
@Autowired private UserRepository target;
@Test
public void test() {
}
}
那么为什么我会收到这个错误?
原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的“com.cth.orm.UserRepository”类型的合格bean:预计至少有1个符合自动装配候选资格的bean。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}
请注意,当我开始时我没有@EnableJpaRepositories
. 这是在对 Google 和 SO 进行广泛研究后添加的,但它并没有解决问题。
解决方案
有点难以猜测 - 所以一些笔记。
您不需要 Hibernate 或 spring-orm 参考(包含在 starter-data-jpa 中),但您需要拥有数据库 jdbc 依赖项,例如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
不知道你为什么使用@ContextConfiguration - 我猜你正在使用Spring Boot而不是普通的Spring?所以你需要一个像这样的配置类:
@Configuration
@EntityScan(basePackages = {"com.cth.orm"})
@EnableJpaRepositories(basePackages = {"com.cth.orm"})
@EnableTransactionManagement // optional
public class DomainConfig {
}
这个类应该在主文件夹中,仅仅在测试中是不够的。
您可以尝试使用https://bootify.io来获得一个正在运行的带有数据库模型的 Spring Boot 项目,以及最新的最佳实践。
推荐阅读
- python - 如本 Java 示例所示,如何在 Python 中使用 HMAC 库?
- mysql - 如何在本机反应中显示来自 MySQL DB 表的链接
- ffmpeg - 如何在ffmpeg中同步多个rtsp输入?
- html - 如何使我的单选按钮具有方形格式
- r - openxlsx::write.xlsx 覆盖现有工作表而不是追加
- html - 从数组中选择表格
- python - 修改 PYTHONPATH 后找不到模块
- reactjs - 反应 onChange 未在受控选择字段上触发
- css - iPad(移动版 Safari)选择选项字体大小不一致
- tensorflow - 还有其他方法可以减少泛化错误吗?