1

コンポーネント -->

      --> feature 1 

      --> feature 2

      --> feature 3

コンポーネントは機能と 1 対多の関係にあります

機能テーブルには 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();    
}

}

4

2 に答える 2

2

を使用すると役立つ場合がcriteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);あります。

于 2012-04-23T12:52:32.610 に答える
0
public static void main(String[] args) 
{
    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    Session session = sessionFactory.openSession();

    Criteria criteria = session.createCriteria(feature.class);
    criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    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();    
}
于 2012-04-24T18:20:12.777 に答える