使用hibernate的延迟加载策略

本文深入探讨了Hibernate中延迟加载策略的应用技巧,特别是针对一对多和多对一查询场景下的使用方法,并提供了解决方案来避免Session关闭异常的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用hibernate的延迟加载策略


hibernate3以后,默认使用延迟加载策略

如果多对一查询的时候,设置不使用延迟加载,可以直接读子属性的属性

例如,student---〉drom,学生对宿舍是典型的一对多

lazy=“false”以后,查询学生信息,可以直接读取宿舍的信息

但是如果遇到多对一查询,设置不使用延迟加载,也不能读取到子属性

如宿舍--〉学生就是一对多的关系,不使用延迟加载也不能读取学生的信息(主属性除外)

如果想根据宿舍查找学生信息,可以用以下方式:

public LIst getStudentWithDrom(){

        List studentList = this.getHibernateTemplate().find("from Drom");
        Iterator it = list.iterator();//使用跌带器
                while(it.hasNext()){
                        Drom drom = (Drom)it.next();
                        if(!Hibernate.isInitialized(drom.getStudents())){
                                session.refresh(drom);//一定要刷新drom的session
                                Hibernate.initialize(drom.getStudend());//强制加载
                        }
                }
        return studentList();
}

注意:如果你使用的是微软的SQLserver2000,而且使用微软提供的驱动(就是那三个包),仍然会抛出session关闭的异常,这是由于该驱动不支持二次查找所
致,不妨试试由sourceforge提供的jtds,需要如下配置:

<bean id="dataSource"
                class="org.apache.commons.dbcp.BasicDataSource">
                <property name="driverClassName"
                        value="net.sourceforge.jtds.jdbc.Driver">
                </property>
                <property name="url"
                        value="jdbc:jtds:sqlserver://localhost:1433/数据库名字">
                </property>
                <property name="username" value="用户名"></property>
                <property name="password" value="密码"></property>
</bean>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值