用于加载的NHibernate自定义HQL

用于加载的NHibernate自定义HQL,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,以下内容摘自NHibernate文档: 15.4。用于加载的自定义SQL您还可以声明自己的SQL(或HQL)实体加载查询: <sql-query name="person"> <return alias="pers" class="Person" lock-mode="upgrade"/> SELECT NAME AS {pers.Name}, ID AS {pers.Id} FROM PERSON WHERE ID=? FOR U

以下内容摘自NHibernate文档:

15.4。用于加载的自定义SQL您还可以声明自己的SQL(或HQL)实体加载查询:

<sql-query name="person">
    <return alias="pers" class="Person" lock-mode="upgrade"/>
    SELECT NAME AS {pers.Name}, ID AS {pers.Id}
    FROM PERSON
    WHERE ID=?
    FOR UPDATE
</sql-query>

选择名称为{pers.NAME},ID为{pers.ID}
从个人
其中ID=?
更新
如前所述,这只是一个命名查询声明。您可以在类映射中引用此命名查询:

<class name="Person">
    <id name="Id">
        <generator class="increment"/>
    </id>
    <property name="Name" not-null="true"/>
    <loader query-ref="person"/>
</class>


没有给出使用HQL的示例。我试图简单地用
替换
,然后用HQL查询替换SQL查询。这导致异常“命名SQL查询未知”。有没有办法告诉它寻找HQL查询而不是SQL查询?

实际的HQL元素是什么样子的?您是否可以使用session.GetNamedQuery(“person”)获取命名查询?我可以使用session.GetNamedQuery(“queryName”)获取并执行命名查询。错误消息明确表示它正在查找“SQL查询”。语句中是否有任何方法告诉它查找HQL查询而不是SQL查询?我没有看到任何特别的方法将加载程序限制为仅SQL。你能创建一个独立的测试吗?你找到这个错误的原因了吗?在加载带有命名Hql查询的集合时,我得到了相同的结果。可能是误导性的错误信息。我将继续讨论……您的实际HQL元素是什么样子的?您是否可以使用session.GetNamedQuery(“person”)获取命名查询?我可以使用session.GetNamedQuery(“queryName”)获取并执行命名查询。错误消息明确表示它正在查找“SQL查询”。语句中是否有任何方法告诉它查找HQL查询而不是SQL查询?我没有看到任何特别的方法将加载程序限制为仅SQL。你能创建一个独立的测试吗?你找到这个错误的原因了吗?在加载带有命名Hql查询的集合时,我得到了相同的结果。可能是误导性的错误信息。我会坚持下去。。。