Как перестать возвращать несколько экземпляров Hibernate при использовании режима извлечения «соединение»? - PullRequest
0 голосов
/ 24 февраля 2012

Учитывая следующее, я пытаюсь принудительно загрузить дочернюю коллекцию (countryData) при выполнении запроса, однако это работает, однако я получаю дубликаты Bin загруженных записей.

public Collection<Bin> getBinsByPromotion(String season, String promotion) {
    final Session session = sessionFactory.getCurrentSession();
    try {
        session.beginTransaction();
        return (List<Bin>) session.createCriteria(Bin.class).
                setFetchMode("countryData", FetchMode.JOIN).
                add(Restrictions.eq("key.seasonCode", season)).
                add(Restrictions.eq("key.promotionCode", promotion)).
                add(Restrictions.ne("status", "closed")).
                list();
    } finally {
        session.getTransaction().commit();
    }
}

Мне не нужно поведение по умолчанию (ленивое), так как запрос возвратит ~ 8 тыс. Записей, таким образом отправляя 16 тыс. Дополнительных запросов для получения дочерних записей.

Если бы я больше ничего не предпочел.

select ... from bins b where b.seasonCode = ?
                         and b.promotionCode = ?
                         and b.status <> 'Closed';
select ... from binCountry bc where bc.seasonCode = ?
                                and bc.promotionCode = ?;

1 Ответ

3 голосов
/ 24 февраля 2012

вы можете использовать CriteriaSpecification.DISTINCT_ROOT_ENTITY;

criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...