2014-05-25 20 views
0

我有一個表休眠負載同一行

canvastowidgets 
{ 
    idCanvas int PK 
    idWidgets int PK 
    version varchar 
    sequence int 
    position int 
    inPanelOrNot int 
} 

和映射XML如下

<hibernate-mapping> 
    <class name="com.config.canvas.CanvasHasWidget" table="canvastowidgets"> 
     <id name="canvasId" type="int"> 
      <column name="idCanvas" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="widgetId" type="int"> 
      <column name="idWidgets" /> 
     </property> 
     <property name="sequence" type="int"> 
      <column name="sequence" /> 
     </property> 
     <property name="position" type="int"> 
      <column name="position" /> 
     </property> 
     <property name="inPanel" type="boolean"> 
      <column name="inPanelOrNot" /> 
     </property> 
    </class> 
</hibernate-mapping> 

當我執行查詢,如下

Query query = session.createQuery("from CanvasHasWidget where idCanvas = :id"); 
     query.setParameter("id",canvas.getCanvasId()); 
     return query.list(); 

查詢是

select canvashasw0_.idCanvas as idCanvas1_2_, canvashasw0_.idWidgets as idWidget2_2_, canvashasw0_.sequence as sequence3_2_, canvashasw0_.position as position4_2_, canvashasw0_.inPanelOrNot as inPanelO5_2_ from canvastowidgets canvashasw0_ where idCanvas=? 

07:38:16822 TRACE BasicBinder:81 - 結合參數[1]爲[INTEGER] - [1]
07:38:16829 TRACE BasicExtractor:78 - 提取的值([idCanvas1_2_]:[INTEGER]) - [1] 07:38:16,835 TRACE BasicExtractor:78 - 提取值([idCanvas1_2_]:[INTEGER]) - [1] 07:38:16,840 TRACE BasicExtractor:78 - 提取值([idCanvas1_2_]:[INTEGER ]) - [1]

該列表返回3行,其中表中有3行。但返回的所有3行都是相同的。

+0

時,您可以直接在數據庫中運行查詢,會發生什麼?選擇canvashasw0_.idCanvas作爲idCanvas1_2_,canvashasw0_.idWidgets作爲idWidget2_2_,canvashasw0_.sequence作爲sequence3_2_,canvashasw0_.position作爲position4_2_,canvashasw0_.inPanelOrNot作爲inPanelO5_2_從canvastowidgets canvashasw0_ where idCanvas =? – Kalyan

+0

你表中的PK是一個雙(idCanvas,idWidgets),而你只映射其中的一個。這是什麼會導致問題。 –

+0

@Javakid它返回3個不同的行不一樣 – chiranjeevigk

回答

1

的問題是,你的表有一個複合主鍵如下:

idCanvas int PK 
idWidgets int PK 

,但你只有映射其中之一。改變你的映射和替換id部分與

<composite-id> 
    <key-property name="idCanvas"/> 
    <key-property name="idWidgets"/> 
</composite-id>