0

「A」と「B」という名前の 2 つのテーブルがあります。テーブル 'B' の主キーは、'b_id' (列名) として 'A' テーブルの外部キーとしてマップされます。テーブル 'A' では、'B' (b_id) の主キーが null である可能性があります。つまり、「B」テーブルにはレコードが存在しません。テーブル「B」には列「del_flag」があります

ここで、「A」テーブルからすべての行を選択する必要があります(「b_id」がnullになっている行を含む)。b_idがテーブル 'A' で null でない場合、テーブル 'B' の 'del_flag' が '0' (ゼロかどうか) であることを確認する必要がありますつまり、「B」レコードが存在する場合、「del_flag」が 0 のレコードのみを表示する必要があります。

上記条件の基準の書き方。

次の最初の2つの条件で試しています。私の要件に基づいて、それは機能するはずです。

   criteria.createAlias("b", "m");  -----> (1)
   criteria.add(Restrictions.or(Restrictions.isNull("b"),Restrictions.eq("m.del_flag", "0"))); --->(2)

   //criteria.add(Restrictions.isNull("b"));  ----->(3)

私が直面していることを問題にしましょう。

問題は「creatAlias」にあります。「b_id」nullになっているものだけを選択するように要件を変更しました。(1)(3) の条件のみ実行しました( 2はコメント)。空のレコードを取得しました。

しばらく苦労した後、条件(1)もコメントしました。今、私結果セットを取得しました。

(1)(3)を実行すると、結果セットが取得されません。(3)のみが結果セットを提供しています。

これが私 の実際の要件の理由かもしれないと考えてい ます。

4

1 に答える 1

0

これを試して:

session.createCriteria(A.class)
            .createAlias("b", "bClass")
            .setFetchMode("bClass", FetchMode.JOIN)
            .add(Restrictions.or(Restrictions.isNull("bClass"),
                    Restrictions.eq("bClass.delFlag", 0)));
于 2012-11-21T08:07:07.643 に答える