簡體   English   中英

使用JPA(條件搜索)在springboot中根據ID以外的其他字段查找表中的所有記錄

[英]Find all records in a table based on other field than ID in springboot using JPA(Conditional Search)

我是 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 的問題。

List<Question> findAllByCourseId(int courseId);

由於 courseId 不是主鍵,因此 course 包含許多屬於一個 CourseId 的課程。

因此,請確保您正在檢索許多記錄,然后使用 List 作為返回類型。

1) 在您的 questionRepository.Make 下面更改。

List<Question> findAllByCourseId(int courseId);

0

不,您不需要進行條件查詢,這將是樣板代碼,如果您在 Spring-boot 中工作,您只需做簡單的事情:在您的存儲庫中使用findBy[exact field name]聲明一個方法名稱。 示例 - 如果您的模型或文檔包含一個字符串字段myField並且您想通過它查找,那么您的方法名稱將是:

findBymyField(String myField);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM