我有一些存储过程用于创建报告(每个SP将数据分组为天/周/月/年)。通过一个例子,我创建了一个简单的实体“Report”,它与SP中的字段相匹配,但是会抛出一个错误,说明需要一个ID(或复合ID)。
如何为生成的数据集定义ID,而不是映射到实际的表?
我的映射文件是:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Report, Business" mutable="false" check="none">
<property name="Year" type="int" />
<property name="Week" type="int" />
<property name="Date" type="DateTime" />
<property name="Count" type="int" />
</class>
<sql-query name="spReport">
<return class="Report, Business" lock-mode="read">
<return-property column="Year" name="Year" />
<return-property column="Week" name="Week" />
<return-property column="Date" name="Date" />
<return-property column="Count" name="Count" />
</return>
exec spReport :StartDate, :EndDate
</sql-query>
</hibernate-mapping>
非常感谢任何帮助。
感谢。
答案 0 :(得分:2)
<class name="Report, Business" mutable="false" check="none">
<composite-id>
<key-property name="Year" type="int" />
<key-property name="Week" type="int" />
<key-property name="Date" type="DateTime" />
<key-property name="Count" type="int" />
</composite-id>
</class>
您必须覆盖Equals
中的GetHashCode
和Report
。
就个人而言,我不喜欢这种做法。最好不要映射类,并在查询中使用SetTransformer(Transformers.AliasToBean<Report>())
。