【问题标题】:Grails Hibernate Criteria: Get the originial table entryGrails Hibernate Criteria:获取原始表条目
【发布时间】:2011-11-17 13:34:52
【问题描述】:

已解决:将连接类型更改为 INNER_JOIN

我正在尝试在执行休眠条件后获取域类的原始表条目。

例如:
域类 A 与域类 B 有一个 hasMany 关联。
A 的 id 为 1 的实体,得到了 B 的两个 id 为 11 和 12 的实体。

我正在执行以下标准:

Criteria criteria = session.createCriteria(A.class)
criteria.createAlias("Bs","B",CriteriaSpecification.LEFT_JOIN)
criteria.add(Restrictions.like("B.property", "%"+something+"%")

def list=criteria.list().unique()

现在我有一个包含 A 的所有实体的结果集,它得到了一个 B 的实体,它满足了条件。

但是 A 的结果与 A 的原始实体不同,关于与 B 的 hasMany 关系。缺少 B 的不满足条件的实体。

例如:id 为 1 的实体 A 只得到了 id 为 11 的实体 B。

即使我执行了一个

def newA=A.findById(list[0])

newA 只获得了 ID 为 11 的 B 实体。而 12 丢失了。

有什么想法吗?

【问题讨论】:

    标签: hibernate grails criteria


    【解决方案1】:

    请参阅:http://adhockery.blogspot.com/2009/06/querying-by-association-redux.htmlhttp://jira.grails.org/browse/GRAILS-7087

    试试这个:

    def list = A.withCriteria {
        createAlias("bs", "aliasedBs")
        like("aliasedBs.property", "%something")
    }
    list.bs // will contain ALL items of the association, independent of the query
    

    【讨论】:

    • 我总是用flush:true保存。如果我执行 def newA=A.findByName(list[0].name) 结果得到所有关联的实例。
    • 什么意思?保存操作?
    • 是的,我们需要更多信息,因为withCriteria 不会返回部分关联。问题可能出在其他地方。
    • 哦,我明白了,候选版本中可能存在一些错误:jira.grails.org/browse/GRAILS-7087。您使用的是 grails 1.3.6、1.3.7 还是 2.RC1?
    • 我添加了创作部分。我正在使用 Grails 1.3.7
    猜你喜欢
    • 2021-01-17
    • 2021-06-21
    • 2013-02-09
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2011-05-11
    相关资源
    最近更新 更多