博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
34hibernate_fetch_5_set_subselect
阅读量:7093 次
发布时间:2019-06-28

本文共 4962 字,大约阅读时间需要 16 分钟。

hibernate抓取策略(集合代理的批量抓取)
设置fetch=
"
subselect
",如:
<
set name=
"
students
" inverse=
"
true
" cascade=
"
all
" fetch=
"
subselect
">
fetch=
"
subselect
",另外发送一条select语句抓取在前面查询到的所有实体对象的关联集合
============================================================================
testFetch1:
public 
void testFetch1() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            Classes classes = (Classes)session.load(Classes.
class
1);
            System.
out.println(
"
classes.name=
" + classes.getName());
            
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);
        }
    }
Hibernate: 
select classes0_.id 
as id0_0_, classes0_.name 
as name0_0_ 
from t_classes classes0_ 
where classes0_.id=?
classes.name=班级0
Hibernate: 
select students0_.classesid 
as classesid1_, students0_.id 
as id1_, students0_.id 
as id1_0_, students0_.name 
as name1_0_, students0_.classesid 
as classesid1_0_ 
from t_student students0_ 
where students0_.classesid=?
student.name=班级0的学生6
student.name=班级0的学生1
student.name=班级0的学生5
student.name=班级0的学生4
student.name=班级0的学生0
student.name=班级0的学生2
student.name=班级0的学生3
====================================影响hql查询=======================================
testFetch2:
/*
*
     * Hibernate: select students0_.classesid as classesid1_, students0_.id as id1_, 
     * students0_.id as id1_0_, students0_.name as name1_0_, 
     * students0_.classesid as classesid1_0_ 
     * from t_student students0_ 
     * where students0_.classesid in (select classes0_.id from t_classes classes0_ where classes0_.id in (1 , 2 , 3))
     
*/
    
public 
void testFetch2() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            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());
                
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);
        }
    }
设置:<
set name=
"
students
" inverse=
"
true
" cascade=
"
all
">    
Hibernate: 
select classes0_.id 
as id0_, classes0_.name 
as name0_ 
from t_classes classes0_ 
where classes0_.id 
in (
1 , 
2 , 
3)
classes.name=班级0
Hibernate: 
select students0_.classesid 
as classesid1_, students0_.id 
as id1_, students0_.id 
as id1_0_, students0_.name 
as name1_0_, students0_.classesid 
as classesid1_0_ 
from t_student students0_ 
where students0_.classesid=?
student.name=班级0的学生2
student.name=班级0的学生1
student.name=班级0的学生6
student.name=班级0的学生5
student.name=班级0的学生4
student.name=班级0的学生3
student.name=班级0的学生0
classes.name=班级1
Hibernate: 
select students0_.classesid 
as classesid1_, students0_.id 
as id1_, students0_.id 
as id1_0_, students0_.name 
as name1_0_, students0_.classesid 
as classesid1_0_ 
from t_student students0_ 
where students0_.classesid=?
student.name=班级1的学生2
student.name=班级1的学生0
student.name=班级1的学生5
student.name=班级1的学生6
student.name=班级1的学生4
student.name=班级1的学生1
student.name=班级1的学生3
classes.name=班级2
Hibernate: 
select students0_.classesid 
as classesid1_, students0_.id 
as id1_, students0_.id 
as id1_0_, students0_.name 
as name1_0_, students0_.classesid 
as classesid1_0_ 
from t_student students0_ 
where students0_.classesid=?
student.name=班级2的学生2
student.name=班级2的学生0
student.name=班级2的学生3
student.name=班级2的学生1
student.name=班级2的学生4
student.name=班级2的学生6
student.name=班级2的学生5
    
设置:<
set name=
"
students
" inverse=
"
true
" cascade=
"
all
" fetch=
"
subselect
">    
Hibernate: 
select classes0_.id 
as id0_, classes0_.name 
as name0_ 
from t_classes classes0_ 
where classes0_.id 
in (
1 , 
2 , 
3)
classes.name=班级0
Hibernate: 
select students0_.classesid 
as classesid1_, students0_.id 
as id1_, students0_.id 
as id1_0_, students0_.name 
as name1_0_, students0_.classesid 
as classesid1_0_ 
from t_student students0_ 
where students0_.classesid 
in (
select classes0_.id 
from t_classes classes0_ 
where classes0_.id 
in (
1 , 
2 , 
3))
student.name=班级0的学生2
student.name=班级0的学生1
student.name=班级0的学生5
student.name=班级0的学生6
student.name=班级0的学生4
student.name=班级0的学生0
student.name=班级0的学生3
classes.name=班级1
student.name=班级1的学生4
student.name=班级1的学生5
student.name=班级1的学生3
student.name=班级1的学生2
student.name=班级1的学生6
student.name=班级1的学生0
student.name=班级1的学生1
classes.name=班级2
student.name=班级2的学生5
student.name=班级2的学生4
student.name=班级2的学生0
student.name=班级2的学生3
student.name=班级2的学生1
student.name=班级2的学生6
student.name=班级2的学生2

转载于:https://www.cnblogs.com/alamps/archive/2012/08/13/2635693.html

你可能感兴趣的文章
linux sysrq
查看>>
Incorrect NSStringEncoding value 0x0000 detected.
查看>>
(转)as3数组的深复制和浅复制
查看>>
Choose a destination with a supported architecture in order to run on this device.
查看>>
HTML5/CSS3系列教程:HTML5 区域(Sectioning)的重要性
查看>>
Spring Batch学习笔记
查看>>
asp.net mvc 如何在执行完某任务后返回原来页面
查看>>
Oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
查看>>
ASP.NET 中 GridView(网格视图)的使用前台绑定
查看>>
Windows的本地时间(LocalTime)、系统时间(SystemTime)、格林威治时间(UTC-Time)、文件时间(FileTime)之间的转换...
查看>>
[转]XBRL应用软件分类
查看>>
C++ 文件的复制、删除、重命名
查看>>
Oracle Patch Set Update and Critical Patch Update April 2011 Released
查看>>
hdu 2189
查看>>
std::map, std::multimap, std::tr1::unordered_map 区别 - 笔记本 - 博客频道 - CSDN.NET
查看>>
/usr/bin/ld: cannot find -lxxx问题总结
查看>>
C 语言 restrict 关键字的使用
查看>>
ASP.NET 自定义成员资格提供程序 Part.4(使用自定义提供程序类)
查看>>
ASP.NET调用V3版本的Google Maps API
查看>>
苹果面试8大难题及答案
查看>>