您的位置:首页 > 其它

使用hibernate的延迟加载策略

2007-08-29 08:47 459 查看
使用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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐