我的项目没有在 UserController 类中创建 UserRepository 组件。
package com.example.diplomAPI;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DiplomApiApplication {
public static void main(String[] args) {
SpringApplication.run(DiplomApiApplication.class, args);
}
}
package com.example.diplomAPI.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
@GeneratedValue
private int id;
private String login;
private String password;
}
package com.example.diplomAPI.controller;
import com.example.diplomAPI.dao.UserRepository;
import lombok.extern.slf4j.Slf4j;
import com.example.diplomAPI.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/main")
public class UserController {
UserRepository userRepository;
@Autowired
UserController(UserRepository userRepository){
this.userRepository = userRepository;
}
@PostMapping("/registrationUser")
public String saveUser(@RequestBody User user){
userRepository.save(user);
return "User saved";
}
@GetMapping("/getAllUsers")
public List<User> getAllUsers(){
return userRepository.findAll();
}
@GetMapping("/getUserByLogin/{login}")
public ResponseEntity<User> getUserByLogin(@PathVariable String login){
return userRepository.findUserByLogin(login)
.map(user -> ResponseEntity.ok().body(user))
.orElse(ResponseEntity.notFound().build());
}
}
package com.example.diplomAPI.dao;
import com.example.diplomAPI.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
Optional<User> findUserByLogin(String login);
}
我的项目结构
com
└── example
└── diplomAPI
├── controller
│ └── UserController.java
├── dao
│ └── UserRepository.java
├── model
│ └── User.java
DiplomApiApplication.java
错误代码:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController' defined in file [C:\Users\extre\IdeaProjects\diplomAPI\target\classes\com\example\diplomAPI\controller\UserController.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'userRepository' defined in com.example.diplomAPI.dao.UserRepository defined in @EnableJpaRepositories declared on DiplomApiApplication: Not a managed type: class com.example.diplomAPI.model.User
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository' defined in com.example.diplomAPI.dao.UserRepository defined in @EnableJpaRepositories declared on DiplomApiApplication: Not a managed type: class com.example.diplomAPI.model.User
Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.example.diplomAPI.model.User
at org.hibernate.metamodel.model.domain.internal.JpaMetamodelImpl.managedType(JpaMetamodelImpl.java:193) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.managedType(MappingMetamodelImpl.java:468) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.managedType(MappingMetamodelImpl.java:98) ~[hibernate-core-6.4.1.Final.jar:6.4.1.Final]
我在互联网上找到的唯一信息是模型应该有一个
@Entity
注释,但我的代码有它。
我还在 @EnableJpaRepositories
类中添加了注释 @EntityScan
和 DiplomApiApplication
,但错误仍然存在。
错误已解决。有必要使用 jakarta 而不是 javax。