①Hibernate【关联】之一对多

1.什么是关联?

 关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。

关联的分类:关联可以分为一对一、一对多/多对一、多对多关联

关联是有方向的

关联的关键点都在外键上

2.如何建立一对多的双向关联关系?

我们以订单和订单项来做demo,

一个订单对多个订单项,多个订单项对一个订单

(订单的实体类里面加入一个属性   Set<OrderItem> orderItems )

 (订单项类中加入属性 Order order)

定义一对多的关系时需要采用接口方式

1.建立订单对订单项的一对多的关系(映射文件中)

<set name="orderItems" cascade="save-update" inverse="true">
		<!-- key 里面填外键 -->
			<key column="oid"></key>
			<one-to-many class="com.zking.four.entity.OrderItem"/>
</set>

2.建立订单项对订单多对一的关系

【注意:在Hibernate当中定义实体对象的集合属性时,只能使用接口而不能使用类】

<!-- 原有oid加入 insert="false" update="false" -->(把insert ,update交由order控制)

<property name="oid" type="java.lang.Integer" column="oid" insert="false" update="false"></property>
<many-to-one name="order" class="com.zking.four.entity.Order" column="oid" ></many-to-one>

3.级联新增

Demo模拟新增了一个具有六个订单项的订单

public void testAddOrder() {
		Order order = new Order();
		order.setOrderNo("order1");
		
		OrderItem orderItem;
		for (int i = 0; i < 6; i++) {
			orderItem = new OrderItem();
			orderItem.setProductId(i);
			orderItem.setQuantity(i);
			
			order.getOrderItems().add(orderItem);
			orderItem.setOrder(order);
		}
		this.orderDao.addOrder(order);
	}

4.级联查询

//获取订单的同时获取订单项

	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())) {//initOrderItems是定义在Order表的一个属性  用来控制加载模式( 0代表懒加载     1.代表立即加载 )
			Hibernate.initialize(o.getOrderItems());
		}
		transaction.commit();
		session.close();
		return o;
	}

5.一对多关联的普通删除

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();
	}
	

猜你喜欢

转载自blog.csdn.net/qq_40979551/article/details/83314505
今日推荐