2011-12-10 34 views
3

我在我的nhibernate映射文件中有一个命名查询,并且每次运行代码时,都无法使用消息'命名查询中的错误'创建会话,并且没有内部异常或其他任何内容指出我的命名查询有什么问题。我对使用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> 

回答

2

是否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>