Spring项目启动创建employeeController bean报UnsatisfiedDependencyException如何解决
问题根因
你的报错完全来自双向一对一关联的配置错误,和包扫描、Spring Bean配置无关,错误栈最底层已经明确给出原因:EmployeeDetail类中@OneToOne注解的mappedBy属性值填写错误,Hibernate找不到Employee类中名为employee的关联属性。
对照你贴出的实体代码可以看到:
Employee实体中关联EmployeeDetail的属性名为employeeDetail- 但你在
EmployeeDetail的@OneToOne(mappedBy = "employee")中填写的值是employee,和对方类的属性名不匹配,导致Hibernate初始化SessionFactory失败,进而引发后续所有依赖SessionFactory的Bean都无法创建,抛出依赖注入异常。
解决步骤
- 修正关联配置
修改EmployeeDetail实体类的关联注解,将mappedBy的值改为和Employee类中对应的属性名一致:
// 修正前 @OneToOne(mappedBy = "employee") private Employee employee; // 修正后 @OneToOne(mappedBy = "employeeDetail", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH}) private Employee employee;
可以根据你的业务需要补充对应的级联操作配置。
- 可选修正方言配置(针对使用MySQL数据库的场景)
你在DemoAppConfig中加载的是MySQL的配置文件persistence-mysql.properties,但当前Hibernate方言配置的是H2数据库的方言,如果你实际使用的是MySQL数据库,需要修改方言配置:
// 如果你用MySQL 5.x hibernateProperties.setProperty( "hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); // 如果你用MySQL 8.x hibernateProperties.setProperty( "hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
修改完成后重启项目即可解决报错。
内容的提问来源于stack exchange,提问作者Stefan Jankovic
相关产品推荐
相关产品推荐

