Database 给定任务的JPA查询

Database 给定任务的JPA查询,database,jpa,jpql,criteria-api,Database,Jpa,Jpql,Criteria Api,我正在做一些学术任务,我被卡住了。情况如下: 我有三个简单的数据库表和由它们生成的Java@Entity类 表格标记: 学生ID(主键) 受试者ID(主键) 标记 学生: 索引号(主键) FNAME LNAME 教员ID public class Student implements Serializable { @Column(name = "FACULTY_ID", nullable = false) private BigDecimal facultyId; @Co

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

表格标记:
学生ID(主键)
受试者ID(主键)
标记

学生:
索引号(主键)
FNAME
LNAME
教员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;
(...)
}
公共类学生实现可序列化{
@列(name=“FACULTY\u ID”,null=false)
私人学院;
@列(nullable=false,长度=20)
私有字符串fname;
@身份证
@列(name=“INDEX_NO”,null=false)
私有BigDecimal indexNo;
@列(nullable=false,长度=20)
私有字符串名称;
@OneToMany(mappedBy=“学生”)
私有列表标记列表1;
(...)
}
学生:
ID(主键)
名称

公共类主题实现可序列化{
@身份证
@列(nullable=false)
私有双十进制id;
@列(nullable=false,长度=60)
私有字符串名称;
@OneToMany(mappedBy=“主题”)
私有列表标记列表;
(...)
}
任务是获取两个列表:
1.尚未获得所有科目分数的学生名单。
2.特定学生没有分数的科目列表。

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

所以我请求你的帮助。

感谢您的关注。

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

这是两个JPQL查询

(一)


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

我不确定这是否正确,但这可能有助于解决您的问题。JPQL中的size()函数可以对集合进行计数

这是两个JPQL查询

(一)

:indexNo是应使用参数设置的学生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;
(...)
}
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;
(...)
}
select m.student
from Mark m
where size(m.subject) <> 
    size(select s from Subject s)
select s
from Subject s
where s not in 
    (select m.s from Mark m where m.student.indexNo = :indexNo)