hiberbate学习之一对多

  • 一对多的配置

1.画图理解


2.执行步骤(客户和联系人)

(1)创建实体类

(2)在实体类中体现他们一对多关系

package com.sq.entity;

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

/**
 *@author sq
 *
 */
public class Customer {
	
	private String c_id;
	private String c_name;
	private Integer age;
	//表示一个客户有多个联系人
	private Set<LinkedMan> linkedMans = new HashSet<LinkedMan>();
	
	
	public Set<LinkedMan> getLinkedMans() {
		return linkedMans;
	}
	public void setLinkedMans(Set<LinkedMan> linkedMans) {
		this.linkedMans = linkedMans;
	}
	public String getC_id() {
		return c_id;
	}
	public void setC_id(String c_id) {
		this.c_id = c_id;
	}
	public String getC_name() {
		return c_name;
	}
	public void setC_name(String c_name) {
		this.c_name = c_name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Costomer [c_id=" + c_id + ", c_name=" + c_name + ", age=" + age
				+ "]";
	}
}

package com.sq.entity;
/**
 *@author sq
 *
 */
public class LinkedMan {
	
	private String l_id;
	private String l_name;
	private Integer l_age;
	//表示一个lianxiren只有一个客户
	private Customer customer;
	
	
	
	public Customer getCustomer() {
		return customer;
	}
	public void setCustomer(Customer customer) {
		this.customer = customer;
	}
	public String getL_id() {
		return l_id;
	}
	public void setL_id(String l_id) {
		this.l_id = l_id;
	}
	public String getL_name() {
		return l_name;
	}
	public void setL_name(String l_name) {
		this.l_name = l_name;
	}
	public Integer getL_age() {
		return l_age;
	}
	public void setL_age(Integer l_age) {
		this.l_age = l_age;
	}
	@Override
	public String toString() {
		return "LinkedMan [l_id=" + l_id + ", l_name=" + l_name + ", l_age="
				+ l_age + "]";
	}
}


(3)配置映射文件

(4)在映射文件中体现一对多关系

<?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>
	<class name="com.sq.entity.LinkedMan" table="t_linkedman">
		<id name="l_id">
			<generator class="uuid"></generator>
		</id>
		<property name="l_name"></property>
		<property name="l_age"></property>
		<!-- 多的一方,实体类只有一个客户所以不需要set标签
			name属性值:实体类中表示一的对象名称
			class:表示对应一的实体类的全路径
			column:表示外键名称,
		 -->
		<many-to-one name="customer" class="com.sq.entity.Customer" column="clid"/>
	</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>
	<class  name="com.sq.entity.Customer" table="t_customer">
		<id name="c_id">
			<generator class="uuid"></generator>
		</id>
		<property name="c_name"></property>
		<property name="age"></property>
		<!-- 在客户映射文件中,表示所有联系人
			使用set标签表示所有联系人
			name属性值就是实体类,集合的属性名
		 -->
		<set name="linkedMans">
			<!-- 一对多建表
				 hibernate机制:默认双向维护外键,在一和多那一方都需要配置外键
				 column属性值就是外键的名称
			 -->
			<key column="clid"></key>
			<!-- 客户所有的联系人,class里面写的联系人类的全路径 -->
			<one-to-many class="com.sq.entity.LinkedMan"/>
		</set>
	</class>
</hibernate-mapping>


  • 一对多级联更新

在客户中set联系人集合,只需要保存客户,会同时保存联系人信息
		<set name="linkedMans" cascade="save-update">
			<!-- 一对多建表
				 hibernate机制:默认双向维护外键,在一和多那一方都需要配置外键
				 column属性值就是外键的名称
			 -->
			<key column="clid"></key>
			<!-- 客户所有的联系人,class里面写的联系人类的全路径 -->
			<one-to-many class="com.sq.entity.LinkedMan"/>
		</set>

  • 一对多级联删除

删除客户时,会同时删除联系人信息
		<set name="linkedMans" cascade="save-update,delete">
			<!-- 一对多建表
				 hibernate机制:默认双向维护外键,在一和多那一方都需要配置外键
				 column属性值就是外键的名称
			 -->
			<key column="clid"></key>
			<!-- 客户所有的联系人,class里面写的联系人类的全路径 -->
			<one-to-many class="com.sq.entity.LinkedMan"/>
		</set>
注意:hibernate机制实现表与表之间关系默认是双向维护的,在修改外键时会发送两次sql语句,因为两个配置文件都有外键,因此需要使用inverse属性,默认false,启用维护,修改为true,即不对另一方维护,可以提高数据更新效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值