hibernate 的left join fetch可以取出lazy(懒加载)对象

hibernate 的left join fetch可以取出lazy对象

 

当你在one-to-many的时候,设置lazy=true时,取对象的时候会使用延迟加载。

但是你可以使用left join fetch强制取出lazy对象 

 

一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接 与延迟声明(lazy declarations). 

 

一个fetch连接通常不需要被指定别名, 因为相关联的对象不应当被用在 where 子句 (或其它任何子句)中。

同时,相关联的对象 并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们。

 

最后注意,使用full join fetch 与 right join fetch是没有意义的。

 

如果你使用属性级别的延迟获取(lazy fetching)(这是通过重新编写字节码实现的),

可以使用 fetch all properties 来强制Hibernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。

 

你可以在lazy="true"的情况下把fetch去掉,就会报异常. 当然,如果lazy="false"就不需要fetch了 



Session session = super.getSession();
		StringBuffer sql = new StringBuffer();
		sql.append(" from CsdOrder t left join fetch t.bsdOrderstatus where 1 = 1 ");
		sql.append(" and t.cmId = :cmId ");
		sql.append(" and t.coOrderNo in (");
		int index = 0;
		for (OrderConfirmForm orderConfirmForm : lstItem) {
			sql.append("'").append(orderConfirmForm.getCoOrderNo()).append("'");
			index++;
			if (index < lstItem.size()) {
				sql.append(",");
			}
		}

猜你喜欢

转载自blog.csdn.net/liao0801_123/article/details/80280541
今日推荐