2012-11-21 55 views
1

我有一些麻煩制定給定的nHibernate映射文件(nHibernate 1.2)的HQL。這個SQL Fiddle示例顯示了表結構和我想要的結果。基本上,我會通過一個管轄權,我希望所有標題沒有管轄權或特定的管轄權。當前進程將所有內容拉回到代碼中並進行篩選;我正在努力改進,以便在SQL級別進行過濾。nHibernate - 如何爲加入的數據HQL

映射文件看起來與此非常相似。

<?xml version="1.0" encoding="utf-8" ?> 
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
     assembly="MyApp.Business" 
     namespace="Ap.Bus.Entity" 
     default-access="field.camelcase-underscore" 
     default-cascade="save-update" > 

     <class name="Titles" table="dbo.Titles" mutable="true" lazy="true"> 
      <!--Primary Key--> 
      <id column="TitleID" name="Id" unsaved-value="0"> 
       <generator class="identity"> 
       </generator> 
      </id> 

     <property column="TITLE" name="Title"/> 
     <property column="Enabled" name="Enabled" /> 

     <bag name="Jurisdictions" table="dbo.Jurisdictions" lazy="false" cascade="none"> 
      <key column="TitleID" /> 
      <many-to-many class="Ap.Shared.Jurisdiction, Ap.Shared" column="JurisdictionID"/> 
     </bag> 
</class> 

我已經嘗試了許多不同的HQLs,我永遠無法得到它的工作,當我開始加入到司法管轄區。當僅在沒有連接的情況下返回啓用的標題時,它正在工作。

那麼,我該如何編寫HQL來完成呢?

回答

1
select t 
from Title t left outer join t.Jurisdictions as j 
where j is null or j = :someJurisdiction 

可能您應該將「.JurisdictionID」添加到上面的最後兩個「j」。

+0

我確實需要按照您的建議來解決問題。我在原來的查詢中沒有包含「select t」,只做「from ...」,就像我在其他例子中看到的那樣。非常感謝! – UnhandledExcepSean