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>