Hibernate基础 ( 4 )单向关联映射

本文详细介绍了Hibernate中的单向关联映射,包括单向N-1映射、单向1-1映射、单向1-n映射以及单向N-N映射的配置方法。通过无连接表和有连接表的方式,展示了如何在持久化类中设置属性及映射文件的修改,以实现不同类型的关联关系。
摘要由CSDN通过智能技术生成

关联映射即:持久化类的属性 是 引用另一持久化类的类

1.单向  N-1映射  student - school   每个学生对应一个正在就读的学校        通过学生访问学校

1.1 无连接表

①POJO类

Student.java

Student类 由于要访问School类属性 ,所有要提供school属性 及setter getter 方法

package xy.po;

public class Student 
{
	public Student()
	{
		
	}
	private int id;
	private String name;
	private School school;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	public School getSchool() {
		return school;
	}
	public void setSchool(School school) {
		this.school = school;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getId() {
		return id;
	}
}


School.java

School类就是一普通的持久化类

package xy.po;

public class School 
{
	public School()
	{
		
	}
	private int id;
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getId() {
		return id;
	}
	private String address;
	private String phone;
	
}


②映射文件

Student.hbm.xml

 

<?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">
 
<!--package 指定下面类的包前缀  -->
<hibernate-mapping package="xy.po">
	<!-- 类 与 表 的映射  若无指定package属性则须全名表示 xy.po.Hero -->
	<class name="Student" table="Student">
		<!--标识名  类型 -->
		<id name="id" type="java.lang.Integer">
			<!-- 标识属性对应的列 -->
			<column name="id" />
			<!-- 主键生成器 -->
			<generator class="identity" />
		</id>
		<!-- 普通属性映射 -->
		<property name="name" type="string">
			<column name="stu_name" />
		</property>
		<!-- N-1 为该属性(name)指定列名(column)作为外键列 (显示在本表  外键列默认为关联表的主键)   -->
		<!-- cascade:是否打开级联  class:指定关联类 -->
		<many-to-one name="school" column="school_id" cascade="all" class="School"/>
		
	</class>
</hibernate-mapping>


School.hbm.xml

<?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">
 
<!--package 指定下面类的包前缀  -->
<hibernate-mapping package="xy.po">
	<!-- 类 与 表 的映射  若无指定package属性则须全名表示 xy.po.Hero -->
	<class name="School" table="school">
		<!--标识名  类型 -->
		<id name="id" type="java.lang.Integer">
			<!-- 标识属性对应的列 -->
			<column name="id" />
			<!-- 主键生成器 -->
			<generator class="identity" />
		</id>
		<!-- 普通属性映射 -->
		<property name="name" type="string">
			<column name="sc_name" />
		</property>
		
		<property name="address" type="string">
			<column name="address" />
		</property>

	</class>
</hibernate-mapping>


 1.2   有连接表

只须将映射配置文件   Student.hbm.xml      的jmany标签修改为join标签即可

 

		<join table="Student_School">
			<!--指定连接表以本表主键作为外键的 属性列名  -->
			<key column="Student_id"/>
			<!--指定关联属性外键列  -->
			<many-to-one name="school" cascade="all" class="School" column="school_id"/>
		</join>


2.单向1-1

只须将N-1的映射配置文件   Student.hbm.xml      的<many-to-one>标签添加unique唯一属性即可

 

3.单向1-n

3.1无连接表

①pojo

Student.java 添加集合属性

private Set<School> school = new HashSet<School>();

②映射文件Student.hbm.xml

		<set name="school" cascade="all">
			<!--指定外键列名字  该列显示在关联的对象表-->
			<key column="student_id"/>
			<!-- 映射到实体类 -->
			<one-to-many class="School" />
		</set>


3.2有连接表

修改映射文件即可



 

		<!-- 指定集合属性 -->
		<set name="school" table="Student_School">
			<!--指定连接表的参照本表的外键列名-->
			<key column="student_id"/>
			<!-- 连接表的映射类外键列 -->
			<many-to-many class="School" column="School_id" unique="true"/>
		</set>


 4.单向N-N 修改映射文件如下


		<!-- 指定集合属性 -->
		<set name="school" table="Student_School">
			<!--指定连接表的参照本表的外键列名-->
			<key column="student_id"/>
			<!-- 连接表的映射类外键列 -->
			<many-to-many class="School" column="School_id"/>
		</set>

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值