Hibernate, Ассоциации не работают - PullRequest
2 голосов
/ 05 августа 2011

У меня есть такая модель

Seizurs => MatCountry => MatCountryI18n

Когда я пытаюсь запросить данные следующим образом

criteria.
createAlias("matCountry","seizure_country",CriteriaSpecification.INNER_JOIN).       
createAlias("seizure_country.matCountryI18ns","seizure_country_translation",CriteriaSpecification.INNER_JOIN).
add(Restrictions.eq("seizure_country_translation.matLanguageCode", "de").
setFetchMode("seizure_country", FetchMode.JOIN).
setFetchMode("seizure_country_translation", FetchMode.JOIN);

и получить данные из БД

List<Seizure> seizures = getHibernateTemplate().findByCriteria(criteria);

Я бы ожидал, что hibernate даст мне только те объекты (особенно те дочерние объекты), которые соответствуют моему заданному запросу (где translation.matLanguageCode = de)

Но когда я получаю доступ к дочерним объектам для MatCountryI18n

logger.info("Seizures: "+seizures.get(0).getMatCountry().getMatCountryI18ns().size());

Это возвращает мне ALL объекты MatCountryI18n, которые связаны с MatCountry

Пожалуйста, помогите.

Что я делаю не так.

С уважением, JS

1 Ответ

2 голосов
/ 05 августа 2011

Вы просите hibernate предоставить вам все Seizurs с MatCountry, у которых есть один или несколько MatCountryI18n с matLanguageCode == 'de'. Это именно то, что вы получаете.

Похоже, вы хотите выбрать только определенные MatCountryI18n с matLanguageCode == 'de'. Я бы сделал это, начав с выбора MatCountryI18n Criteria и выбрав Seizurs через ваши ассоциации в обратном порядке, как вы делаете сейчас. Либо программно, либо через ResultTransformer .

...