Hibernate Criteria returns 重复条目(无连接)
Hibernate Criteria returns duplicate entries ( No joins)
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());
}
table 中有 8 个 ProductId 行。Hibernate 能够找到 8 个记录。然而,它 returns 相同的产品模板 8 次.. 像这样 ...
1
1
1
1
1
1
1
1
这是来自 table ProductId 的直接 select。这个程序没有涉及 JOINS。
这是 ProductId 模板 table
PRODUCT_ID PRODUCT_TEMPLATE_ID
FDC140012 1
FDC140012 2
FDC140012 3
FDH140012 5
FDH140012 6
FDH140012 12
FDH140012 10
FDH140012 11
这是 ProductId 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>
原因是您没有唯一的 ID。所有 ProductId
都具有 FDC140012 作为 id
。
这意味着您只有一列 PRODUCT_ID
作为 id
。
<id name="PRODUCT_ID" type="java.lang.String">
<column name="PRODUCT_ID" />
<generator class="assigned" />
</id>
Hibernate 从缓存中获取所有其他对象。
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());
}
table 中有 8 个 ProductId 行。Hibernate 能够找到 8 个记录。然而,它 returns 相同的产品模板 8 次.. 像这样 ...
1
1
1
1
1
1
1
1
这是来自 table ProductId 的直接 select。这个程序没有涉及 JOINS。
这是 ProductId 模板 table
PRODUCT_ID PRODUCT_TEMPLATE_ID
FDC140012 1
FDC140012 2
FDC140012 3
FDH140012 5
FDH140012 6
FDH140012 12
FDH140012 10
FDH140012 11
这是 ProductId 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>
原因是您没有唯一的 ID。所有 ProductId
都具有 FDC140012 作为 id
。
这意味着您只有一列 PRODUCT_ID
作为 id
。
<id name="PRODUCT_ID" type="java.lang.String">
<column name="PRODUCT_ID" />
<generator class="assigned" />
</id>
Hibernate 从缓存中获取所有其他对象。