2012-11-21 51 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