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)