我在Grails项目中有三个域类:
class Conversation {
static hasMany = [members: ConversationMember]
}
class ConversationMember {
User user
static belongsTo = [conversation: Conversation]
}
class User {
String name
}
我想构造一个休眠条件,使我能够在给定两个用户的情况下返回所有包含引用这两个用户的ConversationMembers的会话。
也就是说,如果我与Josh和Jordyn进行了对话A,并且在Josh和Sam之间进行了对话B,并且在Josh,Jordyn和Sam之间进行了对话C,则给定Josh和Jordyn的条件将返回会话A和C。
我尝试了以下方法,但它们似乎不起作用:
List<Conversation> conversations = Conversation.createCriteria().list() {
and {
members {
ne('user', currentUser)
}
members {
ne('user', conversationMemberToSearch)
}
}
}
List<Conversation> conversations = Conversation.createCriteria().list() {
not {
or {
members {
ne('user', currentUser)
}
members {
ne('user', conversationMemberToSearch)
}
}
}
}
如果不使用sqlRestriction
做些什么,我似乎找不到找到解决方法。有什么想法吗?
答案 0 :(得分:0)
您可以在标准中使用sqlRestriction
来编写本机sql或更好地编写hql查询。
Hql看起来像:"from Conversation where :firstUser in members and :secondUser in members"
。
sqlRestriction将为:"(select count(*) from conversation_members where member_id in (${firstUser.id}, ${secondUser.id}) and conversation_members_id = _this.id) == 2"
,但是您应该检查表和字段名称。 _this
->通常在您的情况下代表标准中的当前主要实体,Conversation
。