使用“join”获取模式时,如何停止hibernate返回多个实例?

时间:2012-02-24 18:18:01

标签: java sql hibernate

鉴于以下内容,我尝试在执行查询时强制加载子集合(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();
    }
}

我不想要默认(懒惰)行为,因为查询将返回~8k记录,从而发送16k其他查询以获取子记录。

如果没有其他我更喜欢的。

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 个答案:

答案 0 :(得分:3)

您可以使用CriteriaSpecification.DISTINCT_ROOT_ENTITY;

criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);