【问题标题】:JPA query for given task给定任务的 JPA 查询
【发布时间】:2012-05-01 02:31:13
【问题描述】:

我正在做一些学术任务,但我被困住了。情况如下:
我有三个简单的数据库表和从它们生成的 Java @Entity 类。

表标记:
STUDENT_ID (PK)
SUBJECT_ID (PK)
马克

public class Mark implements Serializable {
    private BigDecimal mark;
    @Id
    @Column(name = "STUDENT_ID", nullable = false, insertable = false, updatable = false)
    private BigDecimal studentId;
    @Id
    @Column(name = "SUBJECT_ID", nullable = false, insertable = false, updatable = false)
    private BigDecimal subjectId;
    @ManyToOne
    @JoinColumn(name = "SUBJECT_ID")
    private Subject subject;
    @ManyToOne
    @JoinColumn(name = "STUDENT_ID")
    private Student student;
(...)
}

表学生:
INDEX_NO (PK)
FNAME
LNAME
FACULTY_ID

public class Student implements Serializable {
    @Column(name = "FACULTY_ID", nullable = false)
    private BigDecimal facultyId;
    @Column(nullable = false, length = 20)
    private String fname;
    @Id
    @Column(name = "INDEX_NO", nullable = false)
    private BigDecimal indexNo;
    @Column(nullable = false, length = 20)
    private String lname;
    @OneToMany(mappedBy = "student")
    private List<Mark> marksList1;
(...)
}

表学生:
身份证(PK)
姓名

public class Subject implements Serializable {
    @Id
    @Column(nullable = false)
    private BigDecimal id;
    @Column(nullable = false, length = 60)
    private String name;
    @OneToMany(mappedBy = "subject")
    private List<Mark> marksList;
(...)
}

任务是获取两个列表:
1. 尚未获得所有科目成绩的学生名单。
2.特定学生不得分的科目列表。

我不太擅长SQL,所以查询构造有问题。它可以通过任何类似 JPA 的方式来解决,即 JPQL、Criteria API。

所以我请你帮忙。
感谢您的关注。

【问题讨论】:

    标签: database jpa jpql criteria-api


    【解决方案1】:

    我不确定这是否正确,但也许这可以帮助您解决问题。 JPQL 中的 size() 函数可以统计一个集合。

    这些是 2 个 JPQL 查询

    1)

    select m.student
    from Mark m
    where size(m.subject) <> 
        size(select s from Subject s)
    

    2)

    select s
    from Subject s
    where s not in 
        (select m.s from Mark m where m.student.indexNo = :indexNo) 
    

    :indexNo 是应使用参数设置的学生 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 2019-04-09
      • 2020-09-22
      • 1970-01-01
      • 2015-05-17
      相关资源
      最近更新 更多