组件 - >
--> 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();
}
}
答案 0 :(得分:2)
使用criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
可能会有所帮助。
答案 1 :(得分: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();
}