Grails/Hibernate标准,用于检查hasMany关联是否包含某些实体
我在Grails项目中有三个域类:Grails/Hibernate标准,用于检查hasMany关联是否包含某些实体,hibernate,grails,hql,gorm,Hibernate,Grails,Hql,Gorm,我在Grails项目中有三个域类: class Conversation { static hasMany = [members: ConversationMember] } class ConversationMember { User user static belongsTo = [conversation: Conversation] } class User { String name } 我想构造一个Hibernate标准,允许我在给定两个用户的
class Conversation {
static hasMany = [members: ConversationMember]
}
class ConversationMember {
User user
static belongsTo = [conversation: Conversation]
}
class User {
String name
}
我想构造一个Hibernate标准,允许我在给定两个用户的情况下返回包含引用这两个用户的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,我似乎找不到实现这一点的方法。有什么想法吗?您可以在条件中使用sqlRestriction来编写本机sql,或者更好地编写hql查询。
Hql看起来像:来自对话,其中:成员中的第一个用户和成员中的第二个用户。
sqlRestriction将是:从会话成员中选择count*,其中${firstUser.id}、${secondUser.id}中的成员id和会话成员id=\this.id==2,但您应该检查表和字段名_此->通常表示条件中的当前主实体,在您的情况下,它将是对话。我希望找到一个不使用sqlRestriction的解决方案,但如果我仍然可以使用HQL,我会更加开放。所以我可以把sqlRestriction“:firstUser放在members中,把:secondUser放在members中,或者类似的东西?我还没有找到在sqlRestriction字段中使用HQL的任何文档/示例。