spring 创建在应用程序上声明的@EnableJpaRepositories中定义的名为“userRepository”的Bean时出错:不是托管类型:class

2wnc66cl  于 2023-11-16  发布在  Spring
关注(0)|答案(2)|浏览(144)

主类

  1. package com.TVMovie.ReviewSystem;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.boot.autoconfigure.domain.EntityScan;
  6. import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  9. @EnableJpaRepositories(basePackages = "com.TVMovie.ReviewSystem.repository")
  10. @SpringBootApplication
  11. @EntityScan("com.TVMovie.ReviewSystem.entity")
  12. public class Application {
  13. public static void main(String[] args) {
  14. SpringApplication.run(Application.class, args);
  15. }
  16. }

字符串

实体类

  1. package com.TVMovie.ReviewSystem.entity;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. import javax.persistence.CascadeType;
  5. import javax.persistence.Entity;
  6. import javax.persistence.GeneratedValue;
  7. import javax.persistence.GenerationType;
  8. import javax.persistence.Id;
  9. import javax.persistence.OneToMany;
  10. import javax.persistence.Table;
  11. import lombok.Data;
  12. @Data
  13. @Table
  14. @Entity
  15. public class User {
  16. @Id
  17. @GeneratedValue(strategy = GenerationType.IDENTITY)
  18. private Long id;
  19. private String username;
  20. private String password;
  21. private String email;
  22. private String firstName;
  23. private String lastName;
  24. @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
  25. private Set<Rating> ratings = new HashSet<>();
  26. @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
  27. private Set<Review> reviews = new HashSet<>();
  28. public User() {
  29. }
  30. public User(Long id, String username, String password, String email, String firstName, String lastName,
  31. Set<Rating> ratings, Set<Review> reviews) {
  32. super();
  33. this.id = id;
  34. this.username = username;
  35. this.password = password;
  36. this.email = email;
  37. this.firstName = firstName;
  38. this.lastName = lastName;
  39. this.ratings = ratings;
  40. this.reviews = reviews;
  41. }
  42. public Long getId() {
  43. return id;
  44. }
  45. public void setId(Long id) {
  46. this.id = id;
  47. }
  48. public String getUsername() {
  49. return username;
  50. }
  51. public void setUsername(String username) {
  52. this.username = username;
  53. }
  54. public String getPassword() {
  55. return password;
  56. }
  57. public void setPassword(String password) {
  58. this.password = password;
  59. }
  60. public String getEmail() {
  61. return email;
  62. }
  63. public void setEmail(String email) {
  64. this.email = email;
  65. }
  66. public String getFirstName() {
  67. return firstName;
  68. }
  69. public void setFirstName(String firstName) {
  70. this.firstName = firstName;
  71. }
  72. public String getLastName() {
  73. return lastName;
  74. }
  75. public void setLastName(String lastName) {
  76. this.lastName = lastName;
  77. }
  78. public Set<Rating> getRatings() {
  79. return ratings;
  80. }
  81. public void setRatings(Set<Rating> ratings) {
  82. this.ratings = ratings;
  83. }
  84. public Set<Review> getReviews() {
  85. return reviews;
  86. }
  87. public void setReviews(Set<Review> reviews) {
  88. this.reviews = reviews;
  89. }
  90. @Override
  91. public String toString() {
  92. return "User [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email
  93. + ", firstName=" + firstName + ", lastName=" + lastName + ", ratings=" + ratings + ", reviews="
  94. + reviews + "]";
  95. }
  96. }

仓库接口

  1. package com.TVMovie.ReviewSystem.repository;
  2. import java.util.List;
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. import org.springframework.data.jpa.repository.Query;
  5. import org.springframework.data.repository.query.Param;
  6. import org.springframework.stereotype.Repository;
  7. import com.TVMovie.ReviewSystem.entity.User;
  8. @Repository
  9. public interface UserRepository extends JpaRepository<User, Long> {
  10. User save(User user);
  11. List<User> findAll();
  12. long count();
  13. void delete(User user);
  14. User findByUsername(String username);
  15. User findByEmail(String email);
  16. List<User> findByFirstName(String firstName);
  17. List<User> findByLastName(String lastName);
  18. @Query("SELECT u FROM User u LEFT JOIN FETCH u.ratings")
  19. List<User> findAllWithRatings();
  20. @Query(value = "SELECT * FROM user WHERE username LIKE %:search%", nativeQuery = true)
  21. List<User> searchUsersByUsername(@Param("search") String search);
  22. User findByUsernameAndPassword(String username, String password);
  23. }

服务类

  1. package com.TVMovie.ReviewSystem.service;
  2. import java.util.List;
  3. import java.util.Optional;
  4. import org.springframework.stereotype.Service;
  5. import com.TVMovie.ReviewSystem.entity.Rating;
  6. import com.TVMovie.ReviewSystem.entity.Review;
  7. import com.TVMovie.ReviewSystem.entity.User;
  8. public interface UserService {
  9. // Create (Save) a User
  10. User save(User user);
  11. // Retrieve (Read) All Users
  12. List<User> findAll();
  13. Optional<User> findById(Long id);
  14. // Count the Number of Users
  15. long count();
  16. // Delete (Remove) a User
  17. void delete(User user);
  18. // Retrieve a User by Username
  19. User findByUsername(String username);
  20. // Retrieve a User by Email
  21. User findByEmail(String email);
  22. // Retrieve Users by First Name
  23. List<User> findByFirstName(String firstName);
  24. // Retrieve Users by Last Name
  25. List<User> findByLastName(String lastName);
  26. // Retrieve All Users with Ratings
  27. List<User> findAllWithRatings();
  28. // Search Users by Username
  29. List<User> searchUsersByUsername(String search);
  30. // Authenticate a User by Username and Password
  31. Optional<User> authenticateUser(String username, String password);
  32. // Add a Rating to a User
  33. Rating addRatingToUser(User user, Rating rating);
  34. // Remove a Rating from a User
  35. void removeRatingFromUser(User user, Rating rating);
  36. // Add a Review to a User
  37. Review addReviewToUser(User user, Review review);
  38. // Remove a Review from a User
  39. void removeReviewFromUser(User user, Review review);
  40. }
  1. package com.TVMovie.ReviewSystem.service;
  2. import java.util.List;
  3. import java.util.Optional;
  4. import org.springframework.stereotype.Service;
  5. import com.TVMovie.ReviewSystem.entity.Rating;
  6. import com.TVMovie.ReviewSystem.entity.Review;
  7. import com.TVMovie.ReviewSystem.entity.User;
  8. @Service
  9. public class UserServiceImpl implements UserService {
  10. @Override
  11. public User save(User user) {
  12. // TODO Auto-generated method stub
  13. return null;
  14. }
  15. @Override
  16. public List<User> findAll() {
  17. // TODO Auto-generated method stub
  18. return null;
  19. }
  20. @Override
  21. public Optional<User> findById(Long id) {
  22. // TODO Auto-generated method stub
  23. return null;
  24. }
  25. @Override
  26. public long count() {
  27. // TODO Auto-generated method stub
  28. return 0;
  29. }
  30. @Override
  31. public void delete(User user) {
  32. // TODO Auto-generated method stub
  33. }
  34. @Override
  35. public User findByUsername(String username) {
  36. // TODO Auto-generated method stub
  37. return null;
  38. }
  39. @Override
  40. public User findByEmail(String email) {
  41. // TODO Auto-generated method stub
  42. return null;
  43. }
  44. @Override
  45. public List<User> findByFirstName(String firstName) {
  46. // TODO Auto-generated method stub
  47. return null;
  48. }
  49. @Override
  50. public List<User> findByLastName(String lastName) {
  51. // TODO Auto-generated method stub
  52. return null;
  53. }
  54. @Override
  55. public List<User> findAllWithRatings() {
  56. // TODO Auto-generated method stub
  57. return null;
  58. }
  59. @Override
  60. public List<User> searchUsersByUsername(String search) {
  61. // TODO Auto-generated method stub
  62. return null;
  63. }
  64. @Override
  65. public Optional<User> authenticateUser(String username, String password) {
  66. // TODO Auto-generated method stub
  67. return null;
  68. }
  69. @Override
  70. public Rating addRatingToUser(User user, Rating rating) {
  71. // TODO Auto-generated method stub
  72. return null;
  73. }
  74. @Override
  75. public void removeRatingFromUser(User user, Rating rating) {
  76. // TODO Auto-generated method stub
  77. }
  78. @Override
  79. public Review addReviewToUser(User user, Review review) {
  80. // TODO Auto-generated method stub
  81. return null;
  82. }
  83. @Override
  84. public void removeReviewFromUser(User user, Review review) {
  85. // TODO Auto-generated method stub
  86. }
  87. }

控制器类

  1. package com.TVMovie.ReviewSystem.controller;
  2. import com.TVMovie.ReviewSystem.entity.Rating;
  3. import com.TVMovie.ReviewSystem.entity.Review;
  4. import com.TVMovie.ReviewSystem.entity.User;
  5. import com.TVMovie.ReviewSystem.service.UserService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.*;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.Optional;
  12. @Controller
  13. @RestController
  14. @RequestMapping("/users")
  15. public class UserController {
  16. private final UserService userService;
  17. @Autowired
  18. public UserController(UserService userService) {
  19. this.userService = userService;
  20. }
  21. @PostMapping
  22. public User createUser(@RequestBody User user) {
  23. return userService.save(user);
  24. }
  25. @GetMapping
  26. public List<User> getAllUsers() {
  27. return userService.findAll();
  28. }
  29. @GetMapping("/{id}")
  30. public Optional<User> getUserById(@PathVariable Long id) {
  31. return userService.findById(id);
  32. }
  33. @DeleteMapping("/{id}")
  34. public void deleteUser(@PathVariable Long id) {
  35. Optional<User> user = userService.findById(id);
  36. user.ifPresent(u -> userService.delete(u));
  37. }
  38. @PutMapping("/{id}")
  39. public User updateUser(@PathVariable Long id, @RequestBody User user) {
  40. user.setId(id);
  41. return userService.save(user);
  42. }
  43. @GetMapping("/{id}/ratings")
  44. public List<Rating> getUserRatings(@PathVariable Long id) {
  45. Optional<User> user = userService.findById(id);
  46. return user.map(u -> new ArrayList<>(u.getRatings())).orElse(null);
  47. }
  48. @GetMapping("/{id}/reviews")
  49. public List<Review> getUserReviews(@PathVariable Long id) {
  50. Optional<User> user = userService.findById(id);
  51. return user.map(u -> new ArrayList<>(u.getReviews())).orElse(null);
  52. }
  53. }

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-starter-parent</artifactId>
  7. <version>3.1.5</version>
  8. <relativePath /> <!-- lookup parent from repository -->
  9. </parent>
  10. <groupId>com.TVMovie</groupId>
  11. <artifactId>ReviewSystem</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <name>demo</name>
  14. <description>Demo project for Spring Boot</description>
  15. <properties>
  16. <java.version>17</java.version>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-data-jpa</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-data-rest</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-security</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-web</artifactId>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.hibernate.javax.persistence</groupId>
  37. <artifactId>hibernate-jpa-2.1-api</artifactId>
  38. <version>1.0.0.Final</version>
  39. </dependency>
  40. <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
  41. <dependency>
  42. <groupId>javax.validation</groupId>
  43. <artifactId>validation-api</artifactId>
  44. <version>2.0.0.Final</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>org.springframework.boot</groupId>
  48. <artifactId>spring-boot-starter-validation</artifactId>
  49. </dependency>
  50. <dependency>
  51. <groupId>mysql</groupId>
  52. <artifactId>mysql-connector-java</artifactId>
  53. <version>8.0.28</version> <!-- Use the appropriate version -->
  54. </dependency>
  55. <!-- Hibernate -->
  56. <dependency>
  57. <groupId>org.hibernate</groupId>
  58. <artifactId>hibernate-core</artifactId>
  59. <version>5.5.7.Final</version> <!-- Use the appropriate version -->
  60. </dependency>
  61. <dependency>
  62. <groupId>com.h2database</groupId>
  63. <artifactId>h2</artifactId>
  64. <scope>runtime</scope>
  65. </dependency>
  66. <dependency>
  67. <groupId>org.springframework.boot</groupId>
  68. <artifactId>spring-boot-devtools</artifactId>
  69. <scope>runtime</scope>
  70. </dependency>
  71. <dependency>
  72. <groupId>org.projectlombok</groupId>
  73. <artifactId>lombok</artifactId>
  74. <optional>true</optional>
  75. </dependency>
  76. <dependency>
  77. <groupId>com.mysql</groupId>
  78. <artifactId>mysql-connector-j</artifactId>
  79. <scope>runtime</scope>
  80. </dependency>
  81. <dependency>
  82. <groupId>mysql</groupId>
  83. <artifactId>mysql-connector-java</artifactId>
  84. <version>8.0.28</version> <!-- Use the latest version -->
  85. </dependency>
  86. <dependency>
  87. <groupId>org.springframework.boot</groupId>
  88. <artifactId>spring-boot-starter-test</artifactId>
  89. <scope>test</scope>
  90. </dependency>
  91. <dependency>
  92. <groupId>org.springframework.security</groupId>
  93. <artifactId>spring-security-test</artifactId>
  94. <scope>test</scope>
  95. </dependency>
  96. </dependencies>
  97. <build>
  98. <plugins>
  99. <plugin>
  100. <groupId>org.springframework.boot</groupId>
  101. <artifactId>spring-boot-maven-plugin</artifactId>
  102. </plugin>
  103. </plugins>
  104. </build>
  105. </project>


即使我已经多次更正代码并创建代码,我还是得到了相同的错误。
org.springframework.beans.factory.BeanCreationException:创建在com.TVMovie.ReviewSystem.repository中定义的名为“userRepository”的bean时出错。在应用程序上声明的@EnableJpaRepositories中定义的UserRepository:不是托管类型:class com. TVMovie. ReviewSystem. entity. User。

fcy6dtqo

fcy6dtqo1#

这里的问题是混合了hibernate API的版本。spring-boot-starter-parent<version>3.1.5</version>意味着在spring-boot-starter-data-jpa中使用的hibernate的底层版本是6.2.x。它使用jakarta.x而不是javax.x
要修复它:
pom.xml中删除下一个依赖项:

  1. <dependency>
  2. <groupId>org.hibernate.javax.persistence</groupId>
  3. <artifactId>hibernate-jpa-2.1-api</artifactId>
  4. <version>1.0.0.Final</version>
  5. </dependency>
  6. <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
  7. <dependency>
  8. <groupId>javax.validation</groupId>
  9. <artifactId>validation-api</artifactId>
  10. <version>2.0.0.Final</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.hibernate</groupId>
  14. <artifactId>hibernate-core</artifactId>
  15. <version>5.5.7.Final</version> <!-- Use the appropriate version -->
  16. </dependency>

字符串
Entity User类中替换下一个导入:

  1. import javax.persistence.CascadeType;
  2. import javax.persistence.Entity;
  3. import javax.persistence.GeneratedValue;
  4. import javax.persistence.GenerationType;
  5. import javax.persistence.Id;
  6. import javax.persistence.OneToMany;
  7. import javax.persistence.Table;


收件人:

  1. import jakarta.persistence.CascadeType;
  2. import jakarta.persistence.Entity;
  3. import jakarta.persistence.GeneratedValue;
  4. import jakarta.persistence.GenerationType;
  5. import jakarta.persistence.Id;
  6. import jakarta.persistence.OneToMany;
  7. import jakarta.persistence.Table;

展开查看全部
uqdfh47h

uqdfh47h2#

此错误是“Javax”命名空间的结果。将User实体类中的导入语句替换为“Jakarta”命名空间。阅读更多

  1. import javax.persistence.*; //Change this

字符串

  1. import jakarta.persistence.*; //to this

相关问题