nhibernate中的命名查询错误

Posted

技术标签:

【中文标题】nhibernate中的命名查询错误【英文标题】:Named Queries Error in nhibernate 【发布时间】:2011-12-10 00:06:48 【问题描述】:

我的 nhibernate 映射文件中有一个命名查询,每次我运行代码时,它都无法创建会话并显示消息“命名查询中的错误”,并且没有内部异常或任何其他指向问题所在的内容我的命名查询。我对使用 nhibernate 非常陌生,但我确信我已经正确设置了所有内容(即映射文件是嵌入式资源,并且查询中使用的类被正确映射)。

谁能建议我的映射文件是否有明显的错误或问题可能导致此错误。

映射文件:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               schema="SmokefreeServices.Common"
               assembly="Model.Smoking"
               namespace="Model.Smoking">

<class name="CommonReferral" table="Referral">

<id name="ID">
  <generator class="identity" />
</id>

<property name="PatientID" />
<property name="Module" />
<property name="OriginalModule" />
<property name="ReferralSource" />
<property name="OtherReferralSource" />
<property name="ReferralDate" />
<property name="ReferralComments" />
<property name="CreatedBy" />
<property name="CreatedDate" />
<property name="UpdatedBy" />
<property name="UpdatedDate" />

<one-to-one name="Status" class="CurrentReferralStatus" fetch="join" />

<bag name="StatusHistory" inverse="true" lazy="true">
  <key column="ReferralID" />
  <one-to-many class="ReferralStatus" />
</bag>  

</class>

<query name="GetOpenReferral">
<![CDATA[
   from CommonReferral ref
    inner join fetch ref.Status referralStatus
    where ref.PatientID = :patientId
    and referralStatus.IsResolved = 0
  ]]>
</query>

</hibernate-mapping>

【问题讨论】:

【参考方案1】:

是不是CommonReferalCurrentReferralSttaus之间的映射问题。出于兴趣,如果您尝试这样做会发生什么:-

<query name="GetOpenReferral">
<![CDATA[
   from CommonReferral ref
    where ref.PatientID = :patientId
  ]]>
</query>

另一个快速的想法,您可以尝试删除关键字fetch,因为无论如何总是渴望获取一对一。

<query name="GetOpenReferral">
<![CDATA[
   from CommonReferral ref
    inner join ref.Status referralStatus
    where ref.PatientID = :patientId
    and referralStatus.IsResolved = 0
  ]]>
</query>

【讨论】:

以上是关于nhibernate中的命名查询错误的主要内容,如果未能解决你的问题,请参考以下文章

获取 NHibernate 中的命名查询列表

NHibernate中的命名查询不等于运算符

使用 NHibernate 作为带有输入参数的命名查询调用存储过程

使用 PostgreSQL 和 NHibernate 的命名查询

NHibernate 命名查询和二级缓存

NHibernate - 如何使用参数值记录命名参数化查询?