2016-03-24 13 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()); 
    } 

Es gibt 8 ProductId Zeilen in der Tabelle .... Hibernate kann 8 Datensätze finden. aber es gibt gleiche Produktvorlagen 8mal .. so ...Hibernate-Kriterien gibt doppelte Einträge zurück (keine Joins)

1 
1 
1 
1 
1 
1 
1 
1 

Dies ist eine gerade nach vorne aus der Tabelle ProductId wählen. An diesem Programm sind keine JOINS beteiligt. Hier

ist die ProductId Schablonentabelle

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

Hier ist die 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; 
} 
} 

Hier meine Mapping-Datei ist ....

<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

Nun, alle müssen die gleiche PRODUCT_TEMPLATE_ID haben. Oder deine Entität hat einen Fehler. Ohne die Daten und den Code zu sehen, ist es schwer zu erklären. Die Tatsache, dass Sie eine ID einer anderen Entität haben, ist ein Geruch: Sie sollten stattdessen eine Assoziation haben. Und natürlich sollten Sie auch die Java-Namenskonventionen in Java-Code und nicht die SQL-Namenskonventionen beachten. –

+0

vielleicht, weil alle ProductId mit der gleichen Vorlage verknüpft sind (ID 1) –

+0

@Gowtham Wo? –

Antwort

0

Der Grund hast du keine eindeutige ID? Alle ProductId haben FDC140012 als id.

Dies bedeutet, dass Sie nur eine Spalte PRODUCT_ID als id haben.

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

Hibernate ruft alle anderen Objekte aus einem Cache ab.

+0

Ich denke nicht, es gibt eine andere Spalte namens STATE_LIST, die auch eine PK ist. Ich habe einen zusammengesetzten Primärschlüssel (PRODUCT_ID + STATE_LIST) – Gowtham

+0

@Gowtham Warum haben Sie nicht 'STATE_LIST' in der' ProductId'. –