LoginSignup
6

More than 5 years have passed since last update.

Hibernateでleft joinを行おうとした際に重複したインスタンスが現れる対処法

Last updated at Posted at 2014-08-21

下記のソースだと、Hibernateでleft joinして、取得したリストの要素が重複していた。

StringBuffer hql = new StringBuffer("");
hql.append(" from Cat as cat left outer join cat.mate as mat ");

Session currentSession = getHibernateTemplate().getSessionFactory().getCurrentSession();
Query query = currentSession.createQuery(new String(hql));

List<Cat> cats = query.list(); // 重複した要素が取得される。
return cats;

下記のようにHQLの先頭のselectにdistinctをつけると良いみたい。

StringBuffer hql = new StringBuffer(" select distinct cat "); // distinctをつける。
hql.append(" from Cat as cat left outer join cat.mate as mat ");

Session currentSession = getHibernateTemplate().getSessionFactory().getCurrentSession();
Query query = currentSession.createQuery(new String(hql));

List<Cat> cats = query.list();
return cats;

ちなみにCtiteriaで作成しているときは

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

を指定すると良いみたい。

参考URL
http://stackoverflow.com/questions/14056457/left-join-fetching-duplication

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6