楼主把问题复杂化了。
根据楼主的代码:楼主用了Example查询,是想查询符合某些条件的User及他们各自的Address,那很简单:1、代码:
public List getUsersAndAddressByPara( User user ) {
Criteria criteria = this.getSession().createCriteria( User.class );
criteria.add( Example.create( user ) );
return criteria.list();
}2、运行以上代码,如果出现LazyInitializationException,则按如下步骤处理:
既然User与Address是一对多,那么楼主应该在User中已经配置了一个<set>,请在<set>中加入fetch="join"或lazy="false"
形如:
<set ... lazy="false" >
或
<set ... fetch="join" >-----看样子,楼主是Hibernate新手,附带提醒两点:
1、QBE中,传主键是没有意义的,换句话说,就算你给user的id赋值,该值也不被使用。QBE只考虑非主键字段。
2、Expression类已经过时了,不建议使用。以后如果需要用它,请用其父类Restrictions替代。
根据楼主的代码:楼主用了Example查询,是想查询符合某些条件的User及他们各自的Address,那很简单:1、代码:
public List getUsersAndAddressByPara( User user ) {
Criteria criteria = this.getSession().createCriteria( User.class );
criteria.add( Example.create( user ) );
return criteria.list();
}2、运行以上代码,如果出现LazyInitializationException,则按如下步骤处理:
既然User与Address是一对多,那么楼主应该在User中已经配置了一个<set>,请在<set>中加入fetch="join"或lazy="false"
形如:
<set ... lazy="false" >
或
<set ... fetch="join" >-----看样子,楼主是Hibernate新手,附带提醒两点:
1、QBE中,传主键是没有意义的,换句话说,就算你给user的id赋值,该值也不被使用。QBE只考虑非主键字段。
2、Expression类已经过时了,不建议使用。以后如果需要用它,请用其父类Restrictions替代。
想必楼主已经知道:Address的对象,已经包含在User中的。通过与<set>对应的get方法可以得到某个User所对应的全部Address
ProjectCatalog pc = new ProjectCatalog();
pc.setProperty();//输入查询条件,该条件数据库中存在的,但没查出结果public List getProjectCatalogByPara( ProjectCatalog pc ) { Criteria criteria = this.getSession().createCriteria( ProjectCatalog.class );
criteria.add( Example.create( pc ) );
System.out.println(criteria.list().size()); //该行显示为0,应该是ProjectCatalog.class的配置文件有问题,
//不知怎么改,请帮我看一下配置文件,谢谢
return criteria.list();
}<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="org.sim.dao.domain.ProjectCatalog" table="ProjectCatalog" schema="dbo" catalog="sim">
<id name="id" type="integer">
<column name="ID" />
<generator class="identity" />
</id>
<many-to-one name="projectPoint" class="org.sim.dao.domain.ProjectPoint" fetch="select">
<column name="ProjectRank" />
</many-to-one>
<many-to-one name="humanResource" class="org.sim.dao.domain.HumanResource" fetch="select">
<column name="ManagerID" length="50" />
</many-to-one>
<property name="contractId" type="string">
<column name="ContractID" length="50" />
</property>
<property name="projectId" type="string">
<column name="ProjectID" length="50" />
</property>
<property name="projectName" type="string">
<column name="ProjectName" length="50" not-null="true" />
</property>
<property name="projectSource" type="string">
<column name="ProjectSource" length="500" />
</property>
<property name="beginTime" type="timestamp">
<column name="BeginTime" length="23" />
</property>
<property name="endTime" type="timestamp">
<column name="EndTime" length="23" />
</property>
<property name="moneyUsed" type="double">
<column name="MoneyUsed" precision="53" scale="0" />
</property>
<property name="organization" type="string">
<column name="Organization" length="50" />
</property>
<property name="activeType" type="string">
<column name="ActiveType" length="50" />
</property>
<property name="cooperationType" type="string">
<column name="CooperationType" length="50" />
</property>
<property name="courseType" type="string">
<column name="CourseType" length="50" />
</property>
<property name="progress" type="string">
<column name="Progress" length="50" />
</property>
<property name="returnFile" type="string">
<column name="ReturnFile" length="50" />
</property>
<property name="vhflag" type="integer">
<column name="VHflag" />
</property>
<property name="currentYear" type="timestamp">
<column name="CurrentYear" length="23"></column>
</property>
<set name="projectCatalogHrs" cascade="all" lazy="false" inverse="true">
<key>
<column name="ProjectID" />
</key>
<one-to-many class="org.sim.dao.domain.ProjectCatalogHr" />
</set>
<set name="programMoneyDates" cascade="all" lazy="false" inverse="true">
<key>
<column name="ProjectCatalogID"/>
</key>
<one-to-many class="org.sim.dao.domain.ProgramMoneyDate"/>
</set>
</class>
</hibernate-mapping>
直接用一个HQL就可以搞定...List list = session.createQuery("from User u left join u.addresses").list;
这个方法返回的是List的每个元素都是一个长度为二的数组,数组第一个元素是User对象,第二个元素是Addriess对象