Hibernate(四):关联关系

一、关联【association】

1、含义:指的是类之间的引用关系,如果类A与类B关联,那么被引用的类B将被定义为类A的属性
2、分类:
①一对一
②一对多
③多对一
④多对多

说明:关联是有方向的

二、级联新增

1、外键处理的三种方法:
(1)删除从表对应的实体类中的外键属性
(2)在配置的xml中外键属性上添加
(3)在配置的xml中的many-to-one标签中添加

2、Casecade【用来控制如何操作关联的持久化对象的】
①None : 保存,更新或删除当前对象时,忽略其他关联的对象
②Save-update : 保存,更新时级联保存所有的临时对象,并且级联更新关联的游离对象
③Delete : 通过session的delete方法删除当前对象,级联删除关联的对象
④All : 等于save-update操作+delete操作
测试①

@Test
	//增加订单项
	public void testAddOrderItem() {
		OrderItem orderItem = new OrderItem();
//		orderItem.setOid(7);
		orderItem.setPirductId(34);
		orderItem.setQuantity(78);
		Order order = new Order();
		//要保证主表中有该数据
		order.setOrderId(6);
		orderItem.setOrder(order);
		this.orderDao.addOrderItem(orderItem);
		
	}

测试②

//增加订单
	public void testAddOrder() {
		Order order = new Order();
		order.setOrderNo("p8");
		OrderItem orderItem;
		for (int i = 1; i < 7; i++) {
			orderItem = new OrderItem();
			orderItem.setPirductId(i);
			orderItem.setQuantity(i);
			//双向绑定
			order.getOrderItems().add(orderItem);
			orderItem.setOrder(order);
		}
		this.orderDao.addOrder(order);
	}

三、级联查询

//设置是否懒加载
		if(o != null && new Integer(1).equals(order.getInitOrderItems())) {
			Hibernate.initialize(o.getOrderItems());
		}

dao①

	//查询单个订单
	public Order getOrder(Order order) {
		Session session = SessionFactoryUtils.getSession();
		Transaction transaction = session.beginTransaction();
		Order o = session.get(Order.class, order.getOrderId());
		//设置是否懒加载
		if(o != null && new Integer(1).equals(order.getInitOrderItems())) {
			Hibernate.initialize(o.getOrderItems());
		}
		transaction.commit();
		session.close();
		return o;
	}

dao②

//查询所有订单
	public List<Order> getOrderList(){
		Session session = SessionFactoryUtils.getSession();
		Transaction transaction = session.beginTransaction();
		List list = session.createQuery("from Order").list();
		transaction.commit();
		session.close();
		return list;
	}

四、普通删除

先删除从表,再删除主表
Dao

//删除订单以及对应订单项
	public void delOrder(Order order) {
		Session session = SessionFactoryUtils.getSession();
		Transaction transaction = session.beginTransaction();
		//查询对应的订单项
		Order o = session.get(Order.class, order.getOrderId());
		//遍历展示
		for (OrderItem ot : o.getOrderItems()) {
			//删除对应订单项【先删除从表】
			session.delete(ot);
		}
		//再进行订单删除【再删除主表】
		session.delete(o);
		transaction.commit();
		session.close();
	}

五、补充

1、insert属性设置中主控方概念理解
①Lazy : true (默认) ——>延迟加载
False ——>立即加载(影响查询性能)

②outter-join : true ——>使用左联接查询关联(性能不高)
			 False(默认)

③inverse  :true  ——> 将对方设置为主控方(一对多,可以减少sql语句数量,减少多余操作)
			False (默认)

2、【一对多双向关联】关系建立 ----订单与订单项
order.hbm.xml

	
    		<!-- 
    			cascade:用来配置维护实体类的关系所用
    			inverse:关系交由反方控制
    		 -->
    		<set  name = "orderItems" cascade = "save-update" inverse = "true">
	    		<!-- 填外键 -->
	    		<key column = "oid"></key>
	    		<one-to-many class = "com.zking.four.entity.OrderItem"></one-to-many>
    		</set>

3、【多对一双向关联】关系建立

<many-to-one name = "order" class = "com.zking.four.entity.Order" column = "oid"></many-to-one>

说明:
在这里插入图片描述

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值