0

Hibernate でいくつかの悲しみを与えている非常にユニークなクエリがあります。次のエンティティがあります。

class Batch {

  private Set exports;
  private boolean locked;

  ...
}

class Export {

  private bool success;

  ...
}

ロックされていて、エクスポートがないバッチ、または実行したすべてのエクスポートが成功したかどうかがすべて偽であるバッチを照会しようとしています。少なくとも false であるエクスポートを含むバッチのみを取得する基準を作成できますが、結合のすべてのエンティティが false であることを確認するためのドキュメントが見つからないようです。さらに、以前はエクスポートがなく、使用できることがわかったものもsetProjection( Projections.rowCount() )必要でしたが、それにはクエリを 2 回実行する必要がありました。私がこれまでに持っているのはこれです:

Criteria query = session.createCriteria( Batch.class );
query.add( Restrictions.eq( "locked", true ) );
query.createCriteria( "exports" ).add( Restrictions.ne( "success", true ) );
List results = query.list()

私はHibernateにかなり慣れていないので、できることとできないことを完全には認識していません。これは基準オブジェクトで行うことをお勧めしますが、HQL を使用することに異論はありません。これらでこれを実行できない場合、休止状態で SQL ステートメントを処理できますか、それとも制限がありますか?

4

1 に答える 1

0

あなたのシナリオでは HQL を使用したいと思いますが、次の Criteria クエリが役立つと思います。正確に機能しない場合がありますが、アイデアが得られます。

Criteria query = session.createCriteria(Batch.class)
        .createAlias("exports", "exports")
        .add( Restrictions.and(
                Restrictions.eq("locked", true),
                Restrictions.or(
                        Restrictions.isNotEmpty("exports"),
                        Restrictions.ne("success", true)
                        )
                )
于 2013-08-09T18:12:30.350 に答える