Ошибка именованных запросов в nhibernate - PullRequest
3 голосов
/ 10 декабря 2011

У меня есть именованный запрос в моем файле отображения 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 Ответ

2 голосов
/ 11 декабря 2011

Это проблема сопоставления между CommonReferal и CurrentReferralSttaus. Из интереса, что произойдет, если вы попробуете это: -

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