Hibernate05_延迟加载多对多

Hibernate05_延迟加载多对多


注:Hibernate的多对多查询延迟加载默认是开启的
lazy的取值为:true(默认),false, extra

例:查询Course,加载对应的Account。

测试:

Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Course course = session.get(Course.class, 1);
System.out.println(course);

结果:
发送了一条SQL

Hibernate: 
    select
        course0_.id as id1_4_0_,
        course0_.name as name2_4_0_ 
    from
        t_course course0_ 
    where
        course0_.id=?
Course [id=1, name=Java]

测试:

Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Course course = session.get(Course.class, 1);
System.out.println(course.getAccounts());

结果:
发送了两条SQL

Hibernate: 
    select
        course0_.id as id1_4_0_,
        course0_.name as name2_4_0_ 
    from
        t_course course0_ 
    where
        course0_.id=?
Hibernate: 
    select
        accounts0_.cid as cid2_0_0_,
        accounts0_.aid as aid1_0_0_,
        account1_.id as id1_3_1_,
        account1_.name as name2_3_1_ 
    from
        account_course accounts0_ 
    inner join
        t_account account1_ 
            on accounts0_.aid=account1_.id 
    where
        accounts0_.cid=?
[Account [id=1, name=张三]]

关闭默认的延迟加载
Course.hbm.xml

<set name="accounts" table="account_course" lazy="false">
	<key column="cid"></key>
	<many-to-many class="com.blu.entity.Account" column="aid"></many-to-many>
</set>

Account.hbm.xml

<set name="courses" table="account_course" lazy="false">
	<key column="aid"></key>
	<many-to-many class="com.blu.entity.Course" column="cid"></many-to-many>
</set>

再次测试:

Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Course course = session.get(Course.class, 1);
System.out.println(course);

结果:
发送了三条SQL

Hibernate: 
    select
        course0_.id as id1_4_0_,
        course0_.name as name2_4_0_ 
    from
        t_course course0_ 
    where
        course0_.id=?
Hibernate: 
    select
        accounts0_.cid as cid2_0_0_,
        accounts0_.aid as aid1_0_0_,
        account1_.id as id1_3_1_,
        account1_.name as name2_3_1_ 
    from
        account_course accounts0_ 
    inner join
        t_account account1_ 
            on accounts0_.aid=account1_.id 
    where
        accounts0_.cid=?
Hibernate: 
    select
        courses0_.aid as aid1_0_0_,
        courses0_.cid as cid2_0_0_,
        course1_.id as id1_4_1_,
        course1_.name as name2_4_1_ 
    from
        account_course courses0_ 
    inner join
        t_course course1_ 
            on courses0_.cid=course1_.id 
    where
        courses0_.aid=?
Course [id=1, name=Java]

测试:

Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Course course = session.get(Course.class, 1);
System.out.println(course.getAccounts());

结果:
发送了三条SQL

Hibernate: 
    select
        course0_.id as id1_4_0_,
        course0_.name as name2_4_0_ 
    from
        t_course course0_ 
    where
        course0_.id=?
Hibernate: 
    select
        accounts0_.cid as cid2_0_0_,
        accounts0_.aid as aid1_0_0_,
        account1_.id as id1_3_1_,
        account1_.name as name2_3_1_ 
    from
        account_course accounts0_ 
    inner join
        t_account account1_ 
            on accounts0_.aid=account1_.id 
    where
        accounts0_.cid=?
Hibernate: 
    select
        courses0_.aid as aid1_0_0_,
        courses0_.cid as cid2_0_0_,
        course1_.id as id1_4_1_,
        course1_.name as name2_4_1_ 
    from
        account_course courses0_ 
    inner join
        t_course course1_ 
            on courses0_.cid=course1_.id 
    where
        courses0_.aid=?
[Account [id=1, name=张三]]

查询Account同理!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值