Hibernate 条件 - 获取单个对象

标签 hibernate grails groovy grails-orm

我正在使用 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/

相关文章:

ajax - 如何在 View 页面上显示服务器端验证错误

java - Groovy - 对象重用。

xml - 使用 groovy.xml.MarkupBuilder 语法附加到现有的 groovy.util.Node?

spring - Hibernate 4.3 到 5.2 升级 - 不能同时取多个包

java - 手动更新用于在 Hibernate 中生成主键的计数器?

hibernate - Hibernate 查询缓存加载实体

grails - 在 Grails 2.3.6 中定义备用连接池

postgresql - Hibernate 和 PostgreSQL - 序列以 -46 开头

mysql - Grails 实体更改我的表并创建新表

unit-testing - 将模拟代码重构到另一个类中会导致 Spock 测试失败