12hibernate hibernate的关系映射之ManyToMany(重点)

1.多对多单向关联(老师知道教了哪些学生,学生并不知道被哪些老师教)
	a.数据库:中间表
	b.annotation:
		@Entity
		public class Teacher
		{
			private int id;
			private String name;
			@ManyToMany
			@JoinTable(name="t_s",//可修改默认中间表的名称
				JoinColumns{@JoinColumn(name="teacher_id")},
				//定义当前类在中间表中的列名,并参考当前类的id
				inverseJoinColumns={@JoinColumn(name="student_id")}
				//定义对方类在中间表中的外键的名称,参考对方类的id
				)
			private Set<Student> students = new HashSet<Student>();
		}
	
		@Entity
		public class Student
		{
			private int id;
			private String name;
		}
		//默认生成中间表Teacher_Student
		//默认中间表包含Teacher_id和students_id两个字段
	
	c.xml:
	<class name="com.hibernate.Teacher">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>
		<set name="students" table="t_s">
			<key column="teacher_id"></key>
			//相当于JoinColumn,指向自己这张表的外键名称
			<many-to-many class="com.hibernate.Student" column="student_id"></many-to-many>
			//column="student_id"指向对方那张表的外键名称
		</set>
	</class>
	<class name="com.hibernate.Student">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>
	</class>


2.多对多双向关联(比较少用)
	a.annotation:
		@Entity
		public class Teacher
		{
			private int id;
			private String name;
			@ManyToMany
			@JoinTable(name="t_s",
				JoinColumns{@JoinColumn(name="teacher_id")},
				inverseJoinColumns={@JoinColumn(name="student_id")}
				)
			private Set<Student> students = new HashSet<Student>();
		}
	
		@Entity
		public class Student
		{
			private int id;
			private String name;
			@ManyToMany(mappedBy="students")
			private Set<Teacher> teachers = new HashSet<Teacher>();
		}//数据库表没有变化

	b.xml:
		Teacher类的xml不变
		<class name="com.hibernate.Student">
			<id name="id">
				<generator class="native"></generator>
			</id>
			<property name="name"></property>
			<set name="teachers" table="t_s">
				<key column="student_id"></key>
				<many-to-many class="com.hibernate.Teacher" column="teacher_id"></many-to-many>
			</set>
		</class>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值