0
我必須查詢Message
,該Message
位於Groups
的提供列表中,並且當前用戶尚未得到Deactivated
。下面是一些僞代碼來說明的屬性和實體:有關JPQL查詢的幫助
class Message {
private int messageId;
private String messageText;
}
class Group {
private String groupId;
private int messageId;
}
class Deactivated {
private String userId;
private int messageId;
}
這裏是什麼,我需要查詢一個想法,這是最後的,條款,我不知道該怎麼辦(我做了表達化合物NOT IN
)。通過userId篩選停用的消息可能導致多個messageIds,我如何檢查該行的子集是否不包含messageId?
SELECT msg FROM Message msg, Group group, Deactivated unactive WHERE group.messageId = msg.messageId AND (group.groupId = 'groupA' OR group.groupId = 'groupB' OR ...) AND ('someUserId', msg.messageId) NOT IN (unactive.userId, unactive.messageId)
注:...
是那裏,因爲我不知道組id的數量提前。我將它們作爲Collection<String>
接收,因此我需要遍歷它們並動態地將它們添加到JPQL中。
你能澄清這個問題(順便說一句,你可以使用'和group.groupId IN(:list)'而不是多個'或')? – 2010-03-29 08:50:43
感謝您的提示,以減少分支條件。問題是'('someUserId',msg.messageId)NOT IN(unactive.userId,unactive.messageId)'是無效的 - 我不知道如何構建這部分查詢。也許一個子查詢是爲了? – Lightbeard 2010-03-29 15:17:45