![](/img/trans.png)
[英]Spring boot not recognize my Jpa repository Not a managed type: class java.lang.Long
[英]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.