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

Il y a 8 lignes ProductId dans le tableau .... Hibernate est capable de trouver 8 enregistrements. cependant, il retourne les modèles mêmes produits 8 fois .. comme ça ...Les critères Hibernate retournent les entrées dupliquées (Aucune jointure)

1 
1 
1 
1 
1 
1 
1 
1 

C'est un droit de sélectionner la marche avant la table ProductId. il n'y a pas de JOINS impliqué dans ce programme.

Voici la table modèle ProductID

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

Voici le 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; 
} 
} 

Voici mon fichier de mappage ....

<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

Eh bien, tous doivent avoir le même PRODUCT_TEMPLATE_ID. Ou votre entité a un bug. Sans voir les données et le code, c'est difficile à expliquer. Le fait que vous ayez un identifiant d'une autre entité est une odeur: vous devriez avoir une association à la place. Et bien sûr, vous devez également respecter les conventions de dénomination Java dans le code Java, plutôt que les conventions de dénomination SQL. –

+0

peut-être parce que tous les productId sont liés au même modèle (ID 1) –

+0

@Gowtham Où? –

Répondre

0

La raison est-ce que vous n'avez pas d'identifiant unique? Tous ProductId ont FDC140012 comme id. Cela signifie que vous avez une seule colonne PRODUCT_ID comme id. Hibernate obtient tous les autres objets à partir d'un cache.

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

+0

Je ne pense pas, il y a une autre colonne appelée STATE_LIST qui est aussi un PK. J'ai une clé primaire composite (PRODUCT_ID + STATE_LIST) – Gowtham

+0

@Gowtham Pourquoi vous n'avez pas 'STATE_LIST' dans' ProductId'. –