您的位置:首页 > 其它

Hibernate学习43 -- 抓取策略3 -- 子查询抓取

2009-12-10 12:24 423 查看
fetch="subselect",另外发送一条select语句抓取在前面查询到的所有实体对象的关联集合。例如:<set name="students" inverse="true" cascade="all" fetch="subselect">
例子代码如下:
Classes.hbm.xml
<hibernate-mapping package="hibernate">
<class name="Classes" table="t_classes">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="students" inverse="true" cascade="all"
fetch="subselect">
<key column="classesid"/>
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
测试代码:
public class FechTest extends TestCase {
public void testFetch1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Classes classes = (Classes)session.load(Classes.class, 1);
//发出一条sql查询班级
System.out.println("classes.name=" + classes.getName());
//发出一条sql查询这个班级下学生
for (Iterator iter=classes.getStudents().iterator();
iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println("student.name=" +
student.getName());
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}

public void testFetch2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
//发出一条查询这三个班级的sql
List classesList = session.createQuery
("select c from Classes c where c.id in(1, 2, 3)").list();
for (Iterator iter=classesList.iterator();
iter.hasNext();) {
Classes classes = (Classes)iter.next();
System.out.println("classes.name=" +
classes.getName());
//发出一条查询这三个班级下的所有学生sql
for (Iterator iter1=classes.getStudents().iterator();
iter1.hasNext();) {
Student student = (Student)iter1.next();
System.out.println("student.name=" +
student.getName());
}
}
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐