我正在尝试使用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>
感谢。
答案 0 :(得分:1)
指定查询应使用Transformer:DistinctRootEntityTransformer。
query.SetResultTransformer(Transformers.DistinctRootEntity);
答案 1 :(得分:0)
我设法通过执行以下操作来解决此问题。
表中有一个复合键用作主键,我删除了复合键并添加了一个主键列。此新映射会导致从查询返回正确的实体。
如果有人对此为何会有任何解释,请添加一些评论。感谢。
<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>