使用单个SQL语句填充包含另一个pojo的arraylist的pojo并正确迭代结果集

时间:2016-05-08 10:56:53

标签: java mysql sql gson pojo

在我的项目中,我有这个POJO课程:

CourseBean.java:

@Expose
private Integer id;
@Expose
private String title = "";
@Expose
private String description = "";
@Expose
ArrayList<SubjectBean> alSubjects = new ArrayList();

它包含了Course表的列和一个arraylist,它们会有一些代表本课程主题的pojos。

为了填补这个pojo,我使用的程序如下:

  1. 我制作了两个SQL句子:第一个用ID来获得课程 第二个是通过相同的课程过滤所有科目 ID。
  2. 现在要填充pjo,我有一个填充方法来迭代第一个结果集和内部 迭代第二个
  3. 可以优化该程序吗?也许只有一个SQL句子?。

    ---------------------------------- EDIT ------------ ------------------------

    我将使用@Patrick Piatkowski sugested

    的陈述
    SELECT * FROM Course
    JOIN Subject
    ON Course.id = Subject.course_id
    WHERE /* Your filters here */
    

    但现在这引出了另一个问题。当我迭代结果集时,每一行的路线列都是相同的。

    this.setId(oResultSetCourse.getInt("id")); this.setTitle(oResultSetCourse.getString("title")); this.setDescription(oResultSetCourse.getString("description"));
    

    这些应该只填充一次,同时每次迭代都应填充主题的pojo

    处理此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用加入:

SELECT * FROM Subject
WHERE course_id IN 
    (SELECT course_id FROM Course
    WHERE /* Your filters here */)

或者

https://www.example.com

第二种方法的优点是,您只能从Subject获取列,同时您还可以使用第一个语句从Course获取列。