![](/img/trans.png)
[英]query did not return a unique result: 3; nested exception is javax.persistence.NonUniqueResultException: (Spring JPA Project)
[英]javax.persistence.NonUniqueResultException: query did not return a unique result
我正在使用 Spring Boot 和 Spring-data-jpa
我有两个实体Category
和Course
。 它们由@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.