2017-07-05 11 views
0

ドキュメントを持たないアプリケーションを検索したいと思います。休止状態を使用してそれを実行したいと思います。条件にcreateAliasを使用すると、関連があるテーブルのみが検索されます。誰も私はそうすることができますか、それは可能ですか考えているか?データベーステーブル間の関連付けが休止状態を使用して検出されない結果を得る

Application.java

private int appId; 

private String lname; 

private String fname; 

//getters setter generated 

Document.java

private int appId; 

private int docId; 
//getters setters generated 

ここでは私の基準は、私が作成しています、私は基準を設定しています方法で

基本的に
Criteria criteria = session.createCriteria(Application.class, "application"); 
criteria.createAlias("application.appId","document"); 

if (looking for no association) 
{ 
criteria.add(Restrictions.isNull("document.appId")); 
} 

次のようになります制限条件が機能していないので、内部結合。

Criteria criteria = session.createCriteria(Application.class); 
criteria.createAlias("document"); 
if (looking for no association) { 
    criteria.add(Restrictions.isNull("document.appId")); 
} 

まずあなたはApplicationクラスに基づいた基準を作成します。

+1

を解決する助け、なぜあなたはそれのコードを投稿しませんか? – CrazySabbath

+1

それ以上の情報が必要です。一般的には、[mcve]を求めます。あなたが提示したものから明らかに欠けているのは、永続性の注釈と失敗した試行のコードです。おそらく、いくつかのサンプルデータと、それに対応する実際の、そして望ましい結果が役に立つでしょう。 –

+0

条件のために掲示されたコード。 –

答えて

-1

は私はあなたがcreateAliasてみました問題

Criteria criteria = session.createCriteria(Application.class); 
    criteria.createAlias("document",Criteria.LEFT_JOIN); 
    if (looking for no association) { 
     criteria.add(Restrictions.isNull("document.appId")); 
    } 
+0

どうしたのですか?左ジョインでは、ドキュメントがヌルであるという結果が得られ、制限があるとドキュメントがないアプリケーションを見ることができます。私がjoinを指定しないと、最初はドキュメントなしのアプリケーションが得られず、設定の制限は役に立たない。 –

0

はこれを試してみてください。次に、必要なエイリアスを割り当て、最後に希望の制限を適用します。結合タイプを指定

+0

createAliasを使うと、内部結合を作成しているようです。したがって、結果にnullのappIdは表示されず、追加の制限が役立ちません。私は左の結合を作成する必要があるように見えます。 –

+1

あなたは混乱しています。このドキュメントで参照されている結合は、SQL結合とは関係ありません。このプロセスは、エイリアス名を特定のクラスに結合するだけです。 –

+0

createAliasを使用する場合は、「指定された結合タイプを使用して結合に参加し、結合された関連付けに別名を割り当てます」。この結合タイプinnerですか? –

関連する問題