【问题标题】:Criteria - Eagerly fetch associated objects' properties标准 - 急切地获取关联对象的属性
【发布时间】:2013-07-09 09:35:57
【问题描述】:

我有两个由连接表连接的实体。当我尝试获取所有关联实体时,这只获取关联的标识,而不是它们的属性值:

User.createCriteria().get {
    eq property, value
    fetchMode 'authorities', FetchMode.JOIN
}

只导致与连接表的连接:

...
left outer join
    search_role_auth_user authoritie2_ 
        on this_.ID=authoritie2_.AUTHORITIES_ID 
...

我怎样才能急切地获取关联实体的数据?

【问题讨论】:

  • UserAuthority 域类是什么样子的?

标签: hibernate grails hibernate-criteria


【解决方案1】:

假设,

class User{
    static hasMany = [authorities: Authority]
}

class Authority{
    static belongsTo = [user: User]
}

authorities 可以按照以下标准急切获取

User.createCriteria().list {
    eq property, value
    authorities{
       //All authorities for User are eagerly fetched by default
    }
}

注意:-
使用list 代替get,因为标准是基于id 比较而构建的,因此有可能获得多个结果,但是一个属性值。

【讨论】:

  • 谢谢,这很有效,而且比我最终编写的 HQL 更好。顺便说一句,这是在什么地方解释的吗?我没有看到任何东西here。此外,这似乎创建了一个别名(criteria.createAliasHibernateCriteriaBuilder::createAliasIfNeccessary 中被调用),但它使用joinType = INNER_JOIN,但是,生成的 SQL 有一个左连接。怎么回事?
  • 啊,我看错了日志。这确实是一个内部连接,对我不起作用。
  • 好的,用createAlias('authorities', 'a', CriteriaSpecification.LEFT_JOIN)解决了
  • @Artefacto 看看this。此外,默认情况下,关联是通过使用标准的内部连接获取的。如果您明确想要外连接(特别是左外连接),那么您可以关注this
猜你喜欢
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
相关资源
最近更新 更多