【问题标题】:Error creating bean with name 'XXX: Unsatisfied dependency expressed through field 'XXX'创建名称为“XXX”的 bean 时出错:通过字段“XXX”表示的依赖关系不满足
【发布时间】:2017-05-15 11:51:09
【问题描述】:

下面是痕迹:

org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“testController”的 bean 时出错:不满足的依赖关系 通过字段“testDao”表示;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“testDAO”的 bean:调用 init 方法失败; 嵌套异常是 java.lang.IllegalArgumentException: Not a managed 类型:类modele.Test

...

引起:org.springframework.beans.factory.BeanCreationException: 创建名为“testDAO”的 bean 时出错:调用 init 方法 失败的;嵌套异常是 java.lang.IllegalArgumentException: Not a 托管类型:类 modele.Test

...

原因:java.lang.IllegalArgumentException:不是托管类型: 类modele.Test

据我了解,根本错误是 Not a managed type: class modele.Test,这与 Test 未被识别为实体有关?

这是我的项目:

架构:http://imgur.com/a/2xsI4

Application.java

@SpringBootApplication
@ComponentScan("boot")
@ComponentScan("dao")
@ComponentScan("modele")
@EnableJpaRepositories("dao")
public class Application {

    public static void main (String[] args){
        SpringApplication.run(Application.class, args);
    }

}

TestDAO.java

@Transactional
public interface TestDAO extends CrudRepository<Test, Long > {

  /**
   * This method will find an User instance in the database by its email.
   * Note that this method is not implemented and its working code will be
   * automagically generated from its signature by Spring Data JPA.
   */
  public Test findByEmail(String email);

}

Test.java

@Entity
@Table(name = "test")
public class Test {

    // An autogenerated id (unique for each user in the db)
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @NotNull
    private String email;

    @NotNull
    private String name;

    // Public methods

    public Test() {
    }

    public Test(long id) {
        this.id = id;
    }

    public Test(String email, String name) {
        this.email = email;
        this.name = name;
    }
//setters and getters

如果有任何帮助,我将不胜感激。谢谢!

【问题讨论】:

  • 附带说明,如果您将应用程序放在“dao”、“modele”和“boot”的父包中,最后这 4 个注释将毫无用处。 Spring Boot 将基于此自动应用合理的默认值。
  • 是的,但在我的代码中并非如此。不过我现在已经改变了!

标签: hibernate spring-boot spring-data-jpa


【解决方案1】:

使用您当前的设置,您需要添加

@EntityScan("modele")

Test 并不是一个真正的 Spring Bean,它是一个 JPA 实体@ComponentScan 查找 @Configuration@Component@Service@Repository@Controller@RestController@EntityScan 将寻找实体。

您可以阅读:Difference between @EntityScan and @ComponentScan

如果您移动,您的配置会容易得多:

  • Application.java 在你的包的根目录:com.domain.project;
  • com.domain.project.dao 下的仓库;
  • com.domain.project.domain 下的实体。

那么,您就不需要@EntityScan@ComponentScan@EnableJpaRepositories,SpringBoot 只会拾取 com.domain.project 中的所有内容。*

【讨论】:

  • 谢谢,按照您的解释修改了架构。
猜你喜欢
  • 2023-03-25
  • 2019-02-22
  • 2019-10-11
  • 2021-07-23
  • 2020-11-25
  • 2018-03-19
  • 2021-06-23
  • 2019-08-08
  • 2020-12-12
相关资源
最近更新 更多