【问题标题】:nHibernate - How to HQL for joined datanHibernate - 如何对连接数据进行 HQL
【发布时间】:2012-11-21 11:29:19
【问题描述】:

我在为给定的 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 来实现这一点?

【问题讨论】:

    标签: nhibernate hql


    【解决方案1】:
    select t
    from Title t left outer join t.Jurisdictions as j
    where j is null or j = :someJurisdiction
    

    您可能应该将“.JurisdictionID”添加到上面的最后两个“j”。

    【讨论】:

    • 我确实需要按照您的建议添加钥匙。我没有在原始查询中包含“select t”,而只是在执行“from ...”,因为这是我在其他一些示例中看到的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多