2012-03-02 15 views
3

NHibernateとQueryOverにはかなり新しく、必要なSQLを生成するためにNHibernateを取得できません。QueryOver - Joinに追加の条件を追加する

私は参加する必要がありますので、私は参加しているテーブルから多くのデータに到達することを避けるために追加の基準を持っています。

私はQueryOverから受け取ったSQLは次のとおりです。

SELECT * FROM adresse this_ 
left outer join r580_test.afvigelse remarkalia1_ on this_.id=remarkalia1_.adrid and remarkalia1_.dato between '2009-03-13 00:00:00' and '02-03-2012 16:34:35' 
left outer join r580_test.afvigelseklagepunkter remarkcomp5_ on remarkalia1_.id=remarkcomp5_.afvigelseid 
left outer join r580_test.klagepunkter complainta2_ on remarkcomp5_.klagepunktid=complainta2_.id 
WHERE this_.id = 16633 
:私が望む何

SELECT * FROM adresse this_ 
left outer join r580_test.afvigelse remarkalia1_ on this_.id=remarkalia1_.adrid 
left outer join r580_test.afvigelseklagepunkter remarkcomp5_ on remarkalia1_.id=remarkcomp5_.afvigelseid 
left outer join r580_test.klagepunkter complainta2_ on remarkcomp5_.klagepunktid=complainta2_.id 
WHERE this_.id = 16633 and remarkalia1_.dato between '2009-03-13 00:00:00' and '02-03-2012 16:34:35' 

は、この(参加最初の左外側のために最後に移動されている間のどこ日付)であります

私QueryOverは、次のようになります。

adr = session.QueryOver<Address>() 
    .Where(x => x.Id == 16633) 
    .JoinQueryOver<Remark>(y => y.Remarks).Where(y => y.Created > DateTime.Now.AddDays(-14)) 
    .JoinAlias(y => y.RemarkComplaint,() => complaintAlias, JoinType.LeftOuterJoin) 
    .SingleOrDefault(); 

誰もがこの問題を解決する方法についてのアイデアを得ましたか?

答えて

1

joinqueryoverのためのいくつかのオーバーロードがあります - 私はあなたが何かしたいと考えている。この場合、第三のパラメータは、私は信じて、参加に制限を追加しますwithClauseある

Remark remark = null; 
adr = session.QueryOver<Address>() 
    .Where(x => x.Id == 16633) 
    .JoinQueryOver<Remark>(y => y.Remarks,() => remark, y => y.Created > DateTime.Now.AddDays(-14)) 
    .JoinAlias(y => y.RemarkComplaint,() => complaintAlias, JoinType.LeftOuterJoin) 
    .SingleOrDefault(); 

を。

+0

私はそれを動作させるように見えません。 JoinQueryOverのオーバーロードを見つけることができません。パス、エイリアス、およびJoinTypeのみを与えることができます。どのバージョンのNHibernateを使用していますか? – Ramius

+0

私はNHibernate 3.2を使用しています。 – Fourth

+0

これは3.3の一部ではないようですが、最も近いものには 'ICriterion withClause'が必要です。これは魔法の文字列に戻ることを意味します。 – Shagglez

関連する問題