2016-03-24 15 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'。 –