1

Hibernate を使用して自己結合を含む SQL クエリを再現しようとしています。これはSQLです:

select cur.*
  from first ft1,
       first ft2,
       second sc1,
       second sc2,
       third thd
 where sc1.id = sc2.id
   and sc1.idFirst = ft1.id
   and sc2.idFirst = ft2.id
   and ft1.is <> ft2.id    
   and ft1.id = thd.idFirst
   and ft2.id = ?

Criteria と DetachedCriteria を次のように使用してみましたが、動作させることができません。

Criteria criteria = this.getSession().createCriteria(Third.class);

DetachedCriteria first1Criteria = DetachedCriteria.forClass(First.class);
first1Criteria.setProjection(Projections.property("id"));

DetachedCriteria first2Criteria = DetachedCriteria.forClass(First.class);
first2Criteria.setProjection(Projections.property("id"));
first2Criteria.add(Restrictions.eq("id", id)); // where id is passed in from the calling method
first2Criteria.getExecutableCriteria(getSession()).list();

DetachedCriteria second1Criteria = DetachedCriteria.forClass(Second.class);
second1Criteria.setProjection(Projections.property("id"));

DetachedCriteria second2Criteria = DetachedCriteria.forClass(Second.class);
second2Criteria.setProjection(Projections.property("id"));

second1Criteria.add(Property.forName("id.id").in(second2Criteria ));
second1Criteria.add(Property.forName("id.idFirst").in(first1Criteria));
second1Criteria.add(Property.forName("id.idFirst").in(first2Criteria));

first1Criteria.add(Property.forName("id").notIn(first2Criteria));
criteria.add(Property.forName("id").in(first1Criteria));

return criteria.list();

この場合、例外はスローされませんが、クエリは実際には実行されません。これらの線に沿っていくつかの異なる組み合わせを試しましたが、うまくいきませんでした。どんな助けでも大歓迎です!

4

0 に答える 0