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