Критериите за хибернация извличат дубликати - асоциация едно към много

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

      --> feature 1 

      --> feature 2

      --> feature 3

компонентът има връзка едно към много с функцията

Въпреки че има 3 различни записа в таблицата с функции, критериите за хибернация извличат само последния запис и го показват 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