Ошибки NHibernate в именованных запросах

У меня есть следующий именованный SQL-запрос:

<sql-query name="ItemSearch">
    <return class="ItemSearchResult">
        <return-property name="Item" column="ItemId" />
        <return-property name="Distance" column="Distance" />
    </return>
    SELECT
        Items.*,
        dbo.DistanceBetween(Latitude, Longitude, :lat, :long) AS Distance
    FROM Items
    WHERE Contains(Name, :keywords)
    ORDER BY Distance ASC
</sql-query>

Всякий раз, когда я пытаюсь запустить свое приложение, я получаю общую ошибку «Ошибки в именованных запросах: {ItemSearch}». Здесь явно что-то не так?

Класс ItemSearchResult — это очень простой класс-оболочка, который выглядит следующим образом:

public class ItemSearchResult
{
    public Item Item {get; set;}
    public double Distance {get; set;}
}

person Kevin Pang    schedule 15.11.2009    source источник
comment
Убедитесь, что у вас есть файл сопоставления для ItemSearchResult (т. е. вы определили ItemSearchResult.hbm.xml). Если этого нет, nHibernate не будет знать, как сопоставить ваши столбцы Select со свойствами.   -  person Vishnoo Rath    schedule 08.08.2013


Ответы (2)


У вас есть правильный .hbm.xml для ItemSearchResult? Если вы используете ItemSearchResult в своем запросе, вам нужно иметь для него .hbm.xml. Так же, как сущности.

person Afshar Mohebi    schedule 12.12.2010
comment
Только что столкнулся с этой проблемой - там был файл, но это был ItemSearchResult.xml, а НЕ ItemSearchResult.hbm.xml. Потребовалось много времени, чтобы увидеть это. - person jmoreno; 21.08.2014
comment
Прошло много времени с этого ответа. Но вы можете попробовать добавить .hbm, чтобы расширение было .hbm.xml. Это может помочь решить проблему. - person Afshar Mohebi; 24.08.2014

Вот пример из моего кода: Единственное, что отличается между версией NHibernate и моим Hibernate, — это автоматический импорт, и я бы предположил, что пакет.

<hibernate-mapping auto-import="true" package="PackageName">
  <class name="Name of class to maptop">
    <composite-id>
      <key-property name="<name of parameter>" type="TYPE"/>
    </composite-id>
    <property name="COLUMNNAME" type="TYPE"/>
  </class>
  <sql-query name="queryName">
        <return alias="dr" class="Name of class to map to"/>
select columnName as {dr.nameofColumn}, 
   from table
 </sql-query>
</hibernate-mapping>

Я думаю, что проблема, которая существует в вашем коде, заключается в том, что вы специально не сопоставили столбцы и то, как они сопоставляются с вашим классом.

Примечание. Если есть какие-либо поля, не соответствующие формату XML NHibernate, сообщите мне об этом в комментариях. У меня сейчас нет доступа к моим файлам сопоставления NHibernate.

person monksy    schedule 15.11.2009