我正在使用 Hibernate (GORM) 开发一个 Grails 项目。我有以下领域模型:
ClientContact {
static hasMany = [owners: Person]
static belongsTo = [Person]
}
Person {
static hasMany = [clientContacts: ClientContact]
}
当我尝试检索具有特定所有者(Person
)的所有 ClientContacts
时,我遇到了一些有趣的问题。我正在使用以下查询条件:
def query = {
owners {
eq("id", Long.parseLong(params.ownerId))
}
}
def criteria = ClientContact.createCriteria()
def results = criteria.list(params, query)
问题是,当我在结果中遍历我的每个 ClientContacts
时,它们只有一个所有者 - 事实上,大多数都有许多其他所有者。是什么赋予了?我知道 hibernate/GORM 使用延迟获取,但我认为当我尝试访问它们时,它会获取 ClientContact
上的所有其他所有者。
有什么想法吗?我想继续使用 list() 函数,因为它提供了一些不错的分页功能。
最佳答案
我知道这个帖子很老,但我今天遇到了完全相同的问题,解决方案似乎是使用别名,所以改为:
def query = {
owners {
eq("id", Long.parseLong(params.ownerId))
}
}
可以试试:
def query = {
createAlias("owners", "o")
eq("o.id", Long.parseLong(params.ownerId))
}
第一个查询创建左外部联接,第二个查询创建内部联接。请参阅此链接以获取更详细的说明:http://adhockery.blogspot.com/2009/06/querying-by-association-redux.html
关于Hibernate 条件 - 获取单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/255194/