nHibernate - 如何为连接数据创建HQL

时间:2012-11-21 11:29:19

标签: nhibernate hql

我在为给定的nHibernate映射文件(nHibernate 1.2)制作HQL时遇到了一些麻烦。这个SQL Fiddle示例显示了表结构和我想要的结果。基本上,我将通过一个司法管辖区,我希望所有的标题都没有管辖权或特定的管辖权。当前进程将所有内容撤回并过滤代码;我正在努力改进这一点,以便在SQL级别进行过滤。

映射文件与此非常相似。

<?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>

我尝试了很多不同的HQL,当我开始加入司法管辖区时,我永远无法让它工作。只有在没有连接的情况下返回启用的标题时,它才有效。

那么,我如何编写HQL来实现这一目标呢?

1 个答案:

答案 0 :(得分:1)

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

可能你应该在上面的最后两个“j”添加“.JurisdictionID”。