2016-03-24 58 views
1
Criteria cr = session.createCriteria(ProductId.class); 

    List<ProductId> policyCount2 = cr.list(); 
    System.out.println(policyCount2.size()); 

    for(ProductId x : policyCount2) { 
     System.out.println(x.getPRODUCT_TEMPLATE_ID()); 
    } 

表中有8個ProductId行.... Hibernate能夠找到8條記錄。然而,它返回相同的產品模板8次..像這樣...休眠條件返回重複項(無連接)

1 
1 
1 
1 
1 
1 
1 
1 

這是一個直接從表ProductId選擇。這個程序中沒有JOIN參與。

下面是產品ID模板表

PRODUCT_ID PRODUCT_TEMPLATE_ID 
FDC140012 1 
FDC140012 2 
FDC140012 3 
FDH140012 5 
FDH140012 6 
FDH140012 12 
FDH140012 10 
FDH140012 11 

這裏是POJO產品編號...

public class ProductId { 

private String PRODUCT_ID; 
private int PRODUCT_TEMPLATE_ID; 



public String getPRODUCT_ID() { 
    return PRODUCT_ID; 
} 
public void setPRODUCT_ID(String pRODUCT_ID) { 
    PRODUCT_ID = pRODUCT_ID; 
} 
public int getPRODUCT_TEMPLATE_ID() { 
    return PRODUCT_TEMPLATE_ID; 
} 
public void setPRODUCT_TEMPLATE_ID(int pRODUCT_TEMPLATE_ID) { 
    PRODUCT_TEMPLATE_ID = pRODUCT_TEMPLATE_ID; 
} 
public String getSTATE_LIST() { 
    return STATE_LIST; 
} 
public void setSTATE_LIST(String sTATE_LIST) { 
    STATE_LIST = sTATE_LIST; 
} 
} 

這裏是我的映射文件....

<hibernate-mapping> 
    <class name="model.ProductId" table="PRODUCT_ID"> 
     <id name="PRODUCT_ID" type="java.lang.String"> 
      <column name="PRODUCT_ID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="PRODUCT_TEMPLATE_ID" type="int"> 
      <column name="PRODUCT_TEMPLATE_ID" /> 
     </property> 
     <property name="STATE_LIST" type="java.lang.String"> 
      <column name="STATE_LIST" /> 
     </property> 
    </class> 
</hibernate-mapping> 
+0

那麼,所有的都必須有相同的PRODUCT_TEMPLATE_ID。或者你的實體有一個bug。沒有看到數據和代碼,這很難解釋。事實上,你有另一個實體的ID是一種氣味:你應該有一個關聯,而不是。當然,您還應該尊重Java代碼中的Java命名約定,而不是SQL命名約定。 –

+0

也許是因爲所有的productId都鏈接到相同的模板(id 1) –

+0

@Gowtham在哪裏? –

回答

0

原因你沒有一個唯一的ID。所有ProductId都有FDC140012作爲id

這意味着您只有一列PRODUCT_IDid

<id name="PRODUCT_ID" type="java.lang.String"> 
    <column name="PRODUCT_ID" /> 
    <generator class="assigned" /> 
</id> 

Hibernate從緩存中獲取所有其他對象。

+0

我不這麼認爲,還有另一個名爲STATE_LIST的列也是PK。我有一個複合主鍵(PRODUCT_ID + STATE_LIST) – Gowtham

+0

@Gowtham爲什麼'ProductId'中沒有'STATE_LIST'。 –