Hibernate:级联查询

本文探讨了Hibernate中级联查询时遇到的问题,重点分析了Lazy加载在查询单个和所有记录时的挑战。当Lazy设为true时,查询单个记录存在问题,而设为false则在查询所有记录时引发错误。解决方案包括通过Hibernate.initialize()强制加载和在映射文件中将set的lazy属性设为false。然而,这可能导致性能下降,因为查询所有会执行多次SQL。
摘要由CSDN通过智能技术生成

案例:订单类和订单项类

级联查询时的问题
    Lazy=true介绍    查单个时存在问题  
    Lazy=false介绍    查所有时存在问题       在set里把lazy=“false”也可以所报的错(com.crud.four.entity.Order.orderItems,
      could not initialize proxy - no Session)  
<set lazy="false" name="orderItems" cascade="save-update" inverse="true">
    解决方案:通过字段控制,强制加载。Hibernate.initialize()

不在order类加initOrderItems字段时,会报错


 

1.order类

package com.crud.four.entity;

import java.util.HashSet;
import java.util.Set;

public class Order {
	
	private Integer orderId;
	private String orderNo;
	
	//定义一对多的关系时一定需要采用接口方式,不许使用实现类
	//implements java.util.Set  代理实现的是set接口
	private Set<OrderItem> orderItems=new HashSet<OrderItem>();
	
	private Integer initOrderItem=0;//0代表懒加载   1代表立即加载
	
	public Integer getInitOrderItem() {
		return initOrderItem;
	}
	public void setInitOrderItem(Integer initOrderItem) {
		this.initOrderItem = initOrderItem;
	}
	public Set<OrderItem> getOrderItems() {
		return orderItems;
	}
	public void setOrderItems(Set<OrderItem> orderItems) {
		this.orderItems = orderItems;
	}
	public Integer getOrderId() {
		return orderId;
	}
	public void setOrderId(Integer orderId
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值