Hibernate Criteria извлекает дубликаты - связь один ко многим

компонент -->

      --> feature 1 

      --> feature 2

      --> feature 3

компонент имеет отношение один ко многим с функцией

Несмотря на то, что в таблице функций есть 3 разные записи, hibernate Criteria извлекает только последнюю запись и отображает ее 3 раза.

Я даю свой файл hbm, а также код критериев.

Запрос из таблицы компонентов в порядке, но проблема только с таблицей функций.

component.hbm.xml

<class name="com.arv.RelationMapping.component" table="component" >

    <id name="componentPK" column="component_pk" type="java.lang.Long"/>
    <property name="componentName" column="component_name" type="java.lang.String"/>

    <set name="feature" table="feature" inverse="true">     
        <key>
            <column name="component_pk"/>
        </key>      
        <one-to-many class="com.arv.RelationMapping.feature" />     
    </set>

</class>

features.hbm.xml

<class name="com.arv.RelationMapping.feature" table="feature">

    <id name="featurePK" column="feature_pk" type="java.lang.Long"/>

    <many-to-one name="component" class="com.arv.RelationMapping.component" fetch="select">
        <column name="component_pk"/>   
    </many-to-one>

    <property name='scenarioId' column="scenario_id" type="java.lang.String"/>
    <property name='scenarioDesc' column="scenario_desc" type="java.lang.String"/>
    <property name='testCaseFile' column="test_case_file" type="java.lang.String"/>

</class>

Класс Java

открытый класс Тест {

public static void main(String[] args) 
{
    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    Session session = sessionFactory.openSession();

    Criteria criteria = session.createCriteria(feature.class);
    List summaryList = criteria.list();
    feature feature = new feature();

    System.out.println(summaryList.size()); // getting size correctly

    if(summaryList !=null)
    {
        for(Object obj:summaryList)
        {
            feature = (feature)obj;

                    // getting same values for each loop
            System.out.println(feature.getScenarioDesc());
            System.out.println(feature.getScenarioId());
            System.out.println(feature.getFeaturePK());

        }
    }
    session.close();    
}

}


person Aravindh an    schedule 04.04.2012    source источник
comment
Откуда SCENARIO_PK?   -  person Jonathan Rowny    schedule 04.04.2012


Ответы (1)


Использование criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); может помочь.

person s khan    schedule 23.04.2012
comment
Но почему ? Не могли бы вы объяснить? - person jhegedus; 10.02.2014