2016-12-06 57 views
0

我有用戶和任務。每個用戶可以有多組任務,反之亦然。我打電話給任務「成員」中包含的用戶,但我沒有成員實體,它是隱含的,並通過註釋@JoinTable(name = "member"...進行聲明。代碼:使用關聯表的JPQL/HQL查詢

@Entity 
public class User { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column 
    private int id; 

    @ManyToMany 
    @JoinTable(name = "member", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "task_id")) 
    private Set<Task> tasks = new HashSet<>(); 
} 

@Entity 
public class Task { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column 
    private int id; 

    @ManyToMany(mappedBy = "tasks") 
    private Set<User> users = new HashSet<>(); 

    private Calendar initialDate; 
    private Calendar finalDate; 
} 

我的問題是在JPQL查詢,因爲我沒有一個真正的會員豆(@Entity註釋和東西),我不能做任何事情,在我的倉庫一樣(假設我已經和會員實體至極地圖一個用戶和任務):

FROM User u 
WHERE NOT EXISTS 
(
FROM Member m WHERE m.task.finalDate >= :inicial AND m.task.finalDate <= :final 
AND m.user.id = u.id//Member here is a hipotetical/nonexistent entity 
) 

即使世界任何方式使用JPQL/HQL或我需要退回到原生SQL查詢此查詢? Ty

+0

明確JPQL語句開始「選擇{}別名」 ... –

+0

從未使用選擇的HQL查詢,這將解決任何我的煩惱呢? –

+0

這意味着您的查詢是有效的JPQL,即標準投訴JPA。沒有它,他們是沒有用的,除了休眠... –

回答

0

我不認爲你提供的例子需要引用成員實體(如果存在)。你或許可以這樣做:

from User u INNER JOIN u.tasks t WHERE t.finalData < :initial OR t.finalDate > :final 
+0

會員只有一個虛假的實體,它確實不存在於我的項目中,如果它存在就是JPQ查詢。泰,我會嘗試你的解釋。 –