hibernate一对多关系浅解

1. 什么是关联(association)

关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。例如:
      public class A{
        private B b = new B;
        public A(){}
      }

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

#insert属性设置中主控方概念理解: 
3. 以客户和订单的一对多双向关联为例,讲解Set元素中的cascade|inverse|outter-join|lazy属性作用
  3.1 lazy:默认值为true,true延迟加载,false立即加载(一般设置为true,不使用立即加载,因为影响查询性能)
  3.2 outter-join:默认值为false,true使用左外联接查询关联的(但一般不用,因为当我们把该属性设置为true时,所有的查询语句都会默认左外联,那样性能不高)
  3.3 inverse:默认值为false,true表示将对方设置为主控方(一对多双向关联中一般将多方设置为主控方,这样可以减少SQL语句的数量,减少多余的操作)
  3.4 cascade:用来控制如何操作关联的持久化对象的
    3.4.1 none:保存,更新或删除当前对象时,忽略其它关联的对象
    3.4.2 save-update:保存、更新时级联保存所有的临时对象,并且级联更新关联的游离对象
    3.4.3 delete:通过session的delete方法删除当前对象,级联删除关联的对象
    3.4.4 all:等于save-update操作+delete操作

<?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.zking.four.entity.Order"  table="t_hibernate_order">
    	<!-- name:指的是类属性,type:类属性类型,column:表列列端(列名) -->
    		<id name="orderId"  type="java.lang.Integer"  column="order_id">
    		<!-- 配置数据库表的主键生成策略 -->
    				<generator class="increment"></generator>
    		</id>
    		
    		<property name="orderNo"  type="java.lang.String"  column="order_no" />
    		
    		<!-- 
    		cascade:级联属性配置
    		cascade="save-update":级联保存,调一个dao方法,能够保存两张表的数据
    		inverse:关联关系交给对方维护吗?
    		 -->
    		<set name="orderItems" cascade="save-update" inverse="true">
    			<key column="oid"></key>
    			<one-to-many class="com.zking.four.entity.OrderItem"/>
    		</set>
    	</class>
    </hibernate-mapping>
   

猜你喜欢

转载自blog.csdn.net/li_2580/article/details/84555807