2012-04-19 11 views
1

私はいくつかの学問的課題に取り組んでいます。状況は以下の通りです:
私は3つの単純なデータベーステーブルとそれらから生成されたJava @Entityクラスを持っています。与えられたタスクのJPAクエリー

表マーク:
STUDENT_ID(PK)
SUBJECT_ID(PK)
MARK

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; 
(...) 
} 

表学生: ID(PK)
NAME

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によって解決できます。

私はあなたに助けを求めています。
ありがとうございます。

答えて

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です。