【问题标题】:Find all records in a table based on other field than ID in springboot using JPA(Conditional Search)使用JPA(条件搜索)在springboot中根据ID以外的其他字段查找表中的所有记录
【发布时间】:2018-09-03 06:11:07
【问题描述】:

我是 Spring Boot 和制作问答系统的新手。我想根据课程 ID 查找所有问题(这不是主键)。我收到错误消息:“查询没有返回唯一结果:2;嵌套异常是 javax.persistence.NonUniqueResultException:查询没有返回唯一结果:2”。我是这是我现在的工作。

豆类:

@Entity
@Table(name = "questions")
public class Question {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="question_id")
    private int question_id;

    @Column(name="question")
    private String question;

    @Column(name="course_id")
    private int courseId;

    //getters and setters
}

存储库:

@Repository("questionRepository")
public interface QuestionRepository extends CrudRepository<Question, Integer>{
    Question findAllByCourseId(int courseId);
}

服务:

public interface QuestionService {
    Question save(Question question);
    List<Question> listAllQuestion();
    Question findByQuestionName(String questionName);
    List<Question> findAllByCourseId(int courseId);
}

服务实现:

public List<Question> findAllByCourseId(int courseId) {
    return (List<Question>) questionsRepository.findAllByCourseId(courseId);
}

我知道代码在很多方面都是不完美的,因为我是初学者。我也想要一些改进的建议。谢谢。

【问题讨论】:

  • 阅读你的方法:它应该通过课程 ID 找到 all 问题s,但它的返回类型是 Question。应该是List&lt;Question&gt;。此外,您确实需要了解 JPA 的基本原理:在 Question 和 Course 之间应该存在 关联。您不应该在 Question 中有 courseId,而是 Course。

标签: java spring hibernate spring-boot spring-data-jpa


【解决方案1】:

您应该将存储库查找更改为列表,因为您有多个具有相同课程 ID 的问题。

List<Question> findAllByCourseId(int courseId);

【讨论】:

  • 这行得通。非常感谢。
【解决方案2】:

由于 courseId 不是主键,所以课程包含许多课程属于一个 CourseId。

因此,请确保如果您要检索许多记录,则使用 List 作为返回类型。

1) 在您的问题Repository.Make 下面进行更改。

List<Question> findAllByCourseId(int courseId);

【讨论】:

    【解决方案3】:

    0

    不,您不需要进行标准查询,如果您在 Spring-boot 中工作,您只需做简单的事情,这将是样板代码:在您的 repo 中声明一个带有 findBy[exact field name]。示例 - 如果您的模型或文档包含一个字符串字段 myField 并且您想通过它查找,那么您的方法名称将是:

    findBymyField(String myField);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-11
      • 2020-02-22
      • 1970-01-01
      • 2013-09-12
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多