Запрос Hibernate HQL для списка объектов, возвращающих дубликаты - PullRequest
0 голосов
/ 11 августа 2010

Я пытаюсь запросить объекты с HQL, чтобы вернуть список объектов. Запрос возвращает правильное количество строк, но первая запись (т.е. первая возвращенная строка дублируется во всех сущностях). Что может быть причиной этой проблемы?

HQL-запрос

   using (ISession session = NHibernateHelper.OpenSession())
   {

    var query = session.CreateQuery(@"
    select facts from Fact as facts 
    inner join facts.FactorDimension as facDim 
    inner join facts.MarketDimension as markDim
    inner join facDim.TargetDimension as tarDim where 
    markDim.MarketID = :marketId
    and tarDim.TargetID = :targetId
    and facts.ReportYear = :untilReportYear
    and facts.ReportMonth <= :untilReportMonth
    and facts.ReportMonth >= 1
    ");

       query.SetString("targetId", targetId.ToString());
       query.SetString("marketId", marketId.ToString());
       query.SetString("untilReportMonth", untilPeriod.Month.ToString());
       query.SetString("untilReportYear", untilPeriod.Year.ToString());

     return query.List<Fact>();
   }

и файл сопоставления

    <class name="Fact" table="Fact">  

      <composite-id>
        <key-many-to-one name="MarketDimension" column="MarketID" 
class="MarketDimension"/>
        <key-many-to-one name="FactorDimension" column="FactorID" class="FactorDimension"/>       
      </composite-id> 

      <property name="ReportMonth" />
      <property name="ReportYear" />

    </class>

Спасибо.

Ответы [ 2 ]

1 голос
/ 11 августа 2010

Укажите, что запрос должен использовать Transformer: DistinctRootEntityTransformer.

query.SetResultTransformer(Transformers.DistinctRootEntity);
0 голосов
/ 11 августа 2010

Мне удалось решить эту проблему, выполнив следующее.

В таблице есть составной ключ, используемый в качестве первичного ключа, я удалил составной ключ и добавил один столбец первичного ключа. Это новое отображение приводит к тому, что из запроса возвращаются правильные объекты.

Если у кого-либо есть объяснение, почему это так, пожалуйста, добавьте несколько комментариев. Спасибо.

 <class name="Fact" table="Fact">

      <id name="FactID">
        <generator class="guid"/>
      </id>

      <many-to-one name="MarketDimension" column="MarketID" class="MarketDimension"/>
      <many-to-one name="FactorDimension" column="FactorID" class="FactorDimension"/>      


      <property name="ReportMonth" />
      <property name="ReportYear" />

    </class>
...