2012-04-19 26 views
1

我正在處理一些學術任務,並且我被卡住了。情況如下:
我有三個簡單的數據庫表和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)
名稱

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應該使用參數進行設置。