2016-03-24 1 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 строк с продуктами. Hibernate может найти 8 записей. Однако, он возвращает те же шаблоны продуктов в 8 раз .. как это ...Критерий спящего режима возвращает повторяющиеся записи (Нет объединений)

1 
1 
1 
1 
1 
1 
1 
1 

Это прямой выбрать из таблицы PRODUCTID. в этой программе нет JOINS.

Вот таблица шаблон PRODUCTID

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

Вот мой файл Mapping ....

<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. Или у вашей организации есть ошибка. Не видя данных и кода, это трудно объяснить. Тот факт, что у вас есть идентификатор другого объекта, является запахом: вместо этого у вас должна быть ассоциация. И, конечно же, вы должны также соблюдать соглашения об именах Java в коде Java, а не соглашения об именах SQL. –

+0

возможно, потому что все productId связаны с одним и тем же шаблоном (id 1) –

+0

@ Gowtham Где? –

ответ

0

Причина у вас нет уникального идентификатора. Все ProductId имеют FDC140012 как id.

Это значит, что у вас есть только одна колонка PRODUCT_ID как id.

<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 Почему у вас нет 'STATE_LIST' в' ProductId'. –

Смежные вопросы