使用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>
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>
相关文章推荐
- 【Hibernate】Hibernate性能优化之延迟加载与抓取策略
- Hibernate中的取策略延迟加载(翻译hibernate官方文挡19章部分内容)
- hibernate 延迟加载和抓取策略
- Hibernate延迟加载 或 no session or session was closed 问题的解决(OpenSessionInViewFilter使用)
- Hibernate检索策略之延迟加载和立即加载
- 【转】hibernate延迟加载和抓取策略
- Hibernate之加载策略(延迟加载与即时加载)和抓取策略(fetch)
- 理解Hibernate延迟加载策略
- 使用clone解决hibernate+spring集成中的延迟加载问题及分析(no session or session was closed)
- Hibernate中集合的延迟加载(lazy)和抓取策略(fetch)
- hibernate延迟加载的使用和部分源码解析
- Hibernate学习之抓取策略与懒(延迟)加载
- Hibernate使用LAZY延迟加载,initialize获取延迟加载关联内容
- 使用Hibernate.initialize解决no session的延迟加载问题
- 使用struts2 的jsonplugin插件与opensessioninview和hibernate延迟加载时遇到的问题
- Hibernate中的取策略延迟加载(翻译hibernate官方文挡19章部分内容)
- 使用junit给做单元测试时,spring+hibernate项目的延迟加载出现 could not initialize proxy nosession 异常
- 【JavaWeb-21】多对多关系、类和关联级别的加载策略、HQL查询详解、Hibernate连接池配置、Hibernate里悲观锁乐观锁使用
- 使用clone解决hibernate+spring集成中的延迟加载问题及分析(no session or session was closed)
- Hibernate_使用clone解决hibernate延迟加载问题及分析