hibernate 关联关系配置(一对多,多对一)

Hibernate 关联关系:

       1. 什么是关联(association)
           1.1 关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。例如:类A里面 关联 类B

  1.     public class A{
  2.         private B b = new B;//设置类B为类A的属性
  3.         public A(){}
  4.       }

        1.2 关联的分类:关联可以分为一对一、一对多/多对一、多对多关联 ,关联是有方向的

   “一对多”   是最普遍的关系映射,简单来讲就如订单和订单项的关系,

   “一对多” :一个订单项可以有多个订单项,对应着1+n个订单项,也就是说一个订单至少有着一个订单子项

   “多对一” :多个订单项可以对应同一个订单

订单方:

package com.practice.entity;

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

public class Order {
	private Integer order_id;
	private String order_no;
	//一个订单对应着多个订单,采用集合
	private Set<OrderItem> orderItems = new HashSet<>();
	
	private Integer initOrderItems = 0;
	
	public Integer getInitOrderItems() {
		return initOrderItems;
	}
	public void setInitOrderItems(Integer initOrderItems) {
		this.initOrderItems = initOrderItems;
	}
	public Set<OrderItem> getOrderItems() {
		return orderItems;
	}
	public void setOrderItems(Set<OrderItem> orderItems) {
		this.orderItems = orderItems;
	}
	public Integer getOrder_id() {
		return order_id;
	}
	public void setOrder_id(Integer order_id) {
		this.order_id = order_id;
	}
	public String getOrder_no() {
		return order_no;
	}
	public void setOrder_no(String order_no) {
		this.order_no = order_no;
	}
}

订单项:

package com.practice.entity;

public class OrderItem {
	private Integer order_item_id;
	private Integer product_id;
	private Integer quantity;
	private Integer oid;
	//运行时  报 repeated column 重复列映射错误   添加insert update 等于 false解决,或者删除属性列的配置
	//多个订单项对应着同一个订单
	private Order order;
	
	public Order getOrder() {
		return order;
	}
	public void setOrder(Order order) {
		this.order = order;
	}
	public Integer getOrder_item_id() {
		return order_item_id;
	}
	public void setOrder_item_id(Integer order_item_id) {
		this.order_item_id = order_item_id;
	}
	public Integer getProduct_id() {
		return product_id;
	}
	public void setProduct_id(Integer product_id) {
		this.product_id = product_id;
	}
	public Integer getQuantity() {
		return quantity;
	}
	public void setQuantity(Integer quantity) {
		this.quantity = quantity;
	}
	public Integer getOid() {
		return oid;
	}
	public void setOid(Integer oid) {
		this.oid = oid;
	}
}

 关联关系配置(一对多):订单   ------>   订单项 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!-- name:类的全限定名  table:指的是类所对应的表 -->
	<class name="com.practice.entity.Order" table="t_hibernate_order">
		<!-- name:类属性  type:类属性类型 column:对应的表列字段 -->
		<id name="order_id" type="java.lang.Integer" column="order_id">
			<!-- 配置数据库表的主键生成策略 -->		
			<generator class="increment"></generator>
		</id>
		<property name="order_no" type="java.lang.String" column="order_no"></property>
		<!-- cascade级联属性配置:        inverse:关联关系交给对方维护    -->
		<!-- 使用集合体现一对多的关系,name属性名 -->
		<set name="orderItems" cascade="save-update" inverse="true">
			<!-- column两表关联的字段ID -->
			<key column="oid"></key>
			<!-- 一对多关系  class类型对应的对象权限定名 -->
			<one-to-many class="com.practice.entity.OrderItem"/>
		</set>
	</class>
</hibernate-mapping>    

订单项   -------->   订单

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!-- name:类的全限定名  table:指的是类所对应的表 -->
	<class name="com.practice.entity.OrderItem" table="t_hibernate_order_item">
		<!-- name:类属性  type:类属性类型 column:对应的表列字段 -->
		<id name="order_item_id" type="java.lang.Integer" column="order_item_id">
			<!-- 配置数据库表的主键生成策略 -->		
			<generator class="increment"></generator>
		</id>
		<property name="product_id" type="java.lang.Integer" column="product_id"></property>
		<property name="quantity" type="java.lang.Integer" column="quantity"></property>
		<property name="oid" type="java.lang.Integer" column="oid"></property>
		<!-- 多对一关系   name属性名   class类型对应的对象权限定名   column关联ID  -->
		<many-to-one name="order" class="com.practice.entity.Order" column="oid" insert="false" update="false">
		
		</many-to-one>
	</class>
</hibernate-mapping>    

"一对多"关联关系,订单(Order)方对应多个订单项(OrderItem)方,所以订单包含一个集合用于存储多个订单项,订单项包含一个订单用于储存关联自己的订单。

一对多关联关系有一种特例:自身一对多关联(感受下吧,木得代码)。

猜你喜欢

转载自blog.csdn.net/Giraffe_it/article/details/84381989
今日推荐