用hql查询view,但view中无主键,根据某列查询,返回多条记录,返回的结果记录条数正确,但数据全部重复与db查询不一致,解决方案:在映射文件.hbm.xml中定义为联合主键,即用<composite-id>
测试数据如下:
SPREAD_TABLE_CODE,PRICE_FROM,PRICE_TO,SPREAD_VAL
1 0.01 0.1 0.001
1 0.1 0.2 0.001
1 0.2 0.25 0.001
1 0.25 0.4 0.005
1 0.4 0.5 0.005
hbm配置文件(没有使用联合主键):
<hibernate-mapping package="com.shkco.adsr3.ogadapter.framework.vo">
<class name="OgSprd" table="VW_HKEX_SPREAD_TABLE">
<id name="sprdTableCode" column="SPREAD_TABLE_CODE" unsaved-value="null">
<generator class="assigned"/>
</id>
<property name="priceFrom" column="PRICE_FROM"/>
<property name="priceTo" column="PRICE_TO"/>
<property name="sprdVal" column="SPREAD_VAL"/>
</class>
</hibernate-mapping>
hql语句
List sprdList = session.createQuery(
"from OgSprd sprd where sprd.sprdTableCode = :sprdTableCode order by sprd.priceTo asc")
.setInteger("sprdTableCode", sprdTableCode)
.list();
OgSprd -----》VW_HKEX_SPREAD_TABLE
解决方案:
<composite-id>
<key-property name="sprdTableCode" column="SPREAD_TABLE_CODE"/>
<key-property name="priceFrom" column="PRICE_FROM"/>
<key-property name="priceTo" column="PRICE_TO"/>
</composite-id>