Критерии гибернации Grails: получить исходную запись в таблице - PullRequest
0 голосов
/ 17 ноября 2011

Решено: Изменение типа соединения на INNER_JOIN

Я пытаюсь получить исходную запись в таблице класса домена после выполнения критерия гибернации.

Например:
Домен класса A получил ассоциацию hasMany с доменом класса B.
Сущность A с идентификатором 1 получила две сущности B с идентификаторами 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, что касается отношения hasMany к B. Сущности B, которые не удовлетворяют критериям, отсутствуют.

Например: сущность A с идентификатором 1 получила право B только с идентификатором 11.

Даже если я выполню

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

newA получил только сущность B с идентификатором 11. И 12 отсутствует.

Есть идеи?

1 Ответ

0 голосов
/ 17 ноября 2011

См .: http://adhockery.blogspot.com/2009/06/querying-by-association-redux.html и http://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
...