繁体   English   中英

Spring Boot,JPA。 存储库不是托管类型

[英]Spring boot, JPA. Repository not a managed type

我使用Spring boot + jpa + h2,但出现了以下异常:

由以下原因引起:org.springframework.beans.factory.BeanCreationException:创建名称为'userRepository'的bean时出错:调用init方法失败; 嵌套异常是java.lang.IllegalArgumentException:不是托管类型:com.campsite.users.model.User类

Application.java文件:

package com.campsite.users.server;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

/**
 * Class that starts the Springboot Application
 */
@EnableAutoConfiguration
@SpringBootApplication
@ComponentScan({"com.campsite.users.server", "com.campsite.users.controller","com.campsite.users.manager", "com.campsite.users.model"})
@EnableJpaRepositories("com.campsite.users.repository")
public class Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

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

}

ApplicationContext.java文件:

package com.campsite.users.server;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ApplicationContext {

    // inject via application.properties
    @Value("${campsite.module.name}")
    private String moduleName;

    @Bean
    public String getModuleName(){
        return this.moduleName;
    }
}

UserRepository文件:

package com.campsite.users.repository;

import com.campsite.users.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User,Long> {
    User findById(Long id);
}

UserManager.java文件:

package com.campsite.users.manager;

import com.campsite.users.exception.UnexpectedVerbStrategyException;
import com.campsite.users.exception.UserNotExistException;
import com.campsite.users.model.User;
import com.campsite.users.repository.UserRepository;
import com.campsite.users.response.CampsiteResponse;
import com.campsite.users.strategy.AbstractUserStrategy;
import com.campsite.users.strategy.UserActionStrategy;
import com.campsite.users.strategy.VerbStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class UserManager {
    @Autowired
    private UserRepository userRepository;

    public CampsiteResponse manage(VerbStrategy verbStrategy, User user){
        //bla bla;
    }
}

我真的为此感到迷茫。 我检查了另一个stackoverflow问题,但我无法找到我所缺少的东西。

谢谢

添加:

User.java文件

package com.campsite.users.model;

import javax.persistence.*;
import java.util.Objects;

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name = "email_address")
    private String emailAddress;

    @Column(name = "fullName")
    private String fullName;

    @Column(name = "country")
    private String country;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(emailAddress, user.emailAddress) &&
                Objects.equals(fullName, user.fullName);
    }

    @Override
    public int hashCode() {

        return Objects.hash(emailAddress, fullName);
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", emailAddress='" + emailAddress + '\'' +
                ", fullName='" + fullName + '\'' +
                ", country='" + country + '\'' +
                '}';
    }
}

这是我的文件结构:├

── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── campsite
│   │   │           └── users
│   │   │               ├── controller
│   │   │               │   └── MainController.java
│   │   │               ├── exception
│   │   │               │   ├── CampsiteException.java
│   │   │               │   ├── UnexpectedVerbStrategyException.java
│   │   │               │   └── UserNotExistException.java
│   │   │               ├── manager
│   │   │               │   └── UserManager.java
│   │   │               ├── model
│   │   │               │   └── User.java
│   │   │               ├── repository
│   │   │               │   └── UserRepository.java
│   │   │               ├── response
│   │   │               │   └── CampsiteResponse.java
│   │   │               ├── server
│   │   │               │   ├── ApplicationContext.java
│   │   │               │   └── Application.java
│   │   │               └── strategy
│   │   │                   ├── AbstractUserStrategy.java
│   │   │                   ├── UserActionStrategy.java
│   │   │                   ├── UserDeleteStrategy.java
│   │   │                   ├── UserGetStrategy.java
│   │   │                   ├── UserPostStrategy.java
│   │   │                   ├── UserPutStrategy.java
│   │   │                   └── VerbStrategy.java
│   │   └── resources
│   │       ├── application.properties
@ComponentScan({"com.campsite.users.server", "com.campsite.users.controller","com.campsite.users.manager", "com.campsite.users.model"})
@EnableJpaRepositories("com.campsite.users.repository")

我认为您在启动SpringBoot应用程序时不需要添加这些注释。 你为什么不尝试没有它们? 另外,将您的Application类移动到com.campsite.users。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM