繁体   English   中英

javax.persistence.NonUniqueResultException:查询未返回唯一结果

[英]javax.persistence.NonUniqueResultException: query did not return a unique result

我正在使用 Spring Boot 和 Spring-data-jpa

我有两个实体CategoryCourse 它们由@ManyToMany关联。

  public class Course {
        @Id
        @GeneratedValue(generator = "inc")
        @GenericGenerator(name = "inc", strategy = "increment")
        private int courseId;
        @NotBlank(message = "Add the course's title!")
        private String title;
    
        @ManyToMany(mappedBy = "courses", fetch = FetchType.EAGER)
        private Set<Category> categories;
}

public class Category {
    @Id
    @GeneratedValue(generator = "inc")
    @GenericGenerator(name = "inc", strategy = "increment")
    private int categoryId;
    @NotBlank(message = "category's name must be not empty!")
    private String name;

    @ManyToMany(cascade = CascadeType.PERSIST)
    @JoinTable(
            name="course_category",
            joinColumns = @JoinColumn(name = "category_id"),
            inverseJoinColumns = @JoinColumn(name = "course_id")
    )
    private Set<Course> courses;

当我下载一个类别时,我也想下载它的所有课程(没有fetchType.EAGER因为我不想在下载所有类别时获取课程)。 这是我在CategoryRepository (JpaRepository) 中的覆盖查询:

    @Override
    @Query("SELECT cat FROM Category cat JOIN FETCH cat.courses")
    Optional<Category> findById(Integer id); 

由于我想从两个表发送我的客户端数据,我创建了一个 DTO:

public class CategoryAndCourses {
    private Category category;
    private List<Course> courses;

    public CategoryAndCourses(Category category, List<Course> courses) {
        this.category = category;
        this.courses = courses;
    }

有一个地方我实际上通过 DTO 发送了课程和类别:

public CategoryAndCourses getCourses(int id) {
        var category = repository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException("No category with given id"));
            var result = new CategoryAndCourses(category, new ArrayList<>(category.getCourses()));
        return result;
    }

使用这样的代码,我收到此错误: javax.persistence.NonUniqueResultException: query did not return a unique result: 8如何解决?

错误很明显:您有一个查询返回 1 个以上的结果,并且您的代码被定义为期望一个结果。

您在以下查询的id上没有遗漏WHERE吗?

@Query("SELECT cat FROM Category cat JOIN FETCH cat.courses")
Optional<Category> findById(Integer id);

暂无
暂无

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

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