Hibernate 多对多表的搭建

本文介绍使用Hibernate实现学生与课程之间的多对多关系映射的方法,包括表结构设计、Java类定义、XML映射文件配置及配置文件设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、建表
        student(                                   |    student_course(                                                                   |    course(
            sid                       ————>|            sid      cid      // 这两个既是主键也是外键    ————> |        cid
            sname                                 |    )                                                                                            |        cname
            description                           |                                                                                                 |        description
        )                                               |                                                                                                 |    )


2、建类 Student.java

public  class  Student  implements  Serializable{
	private Long sid;
	private String sname;
	private String description;
	private Set<Course> courses;
	封装……
}
        写Student.hbm.xml
			<hibernate-mapping>
				<class name="cn.itcast.hiberate.sh.domain.manytomany.Student">
					<id name="sid" type="java.lang.Long" length="5">
						<generator class="increment"></generator>
					</id>
					<property name="sname" type="java.lang.String" length="20"></property>
					<property name="description" length="100"></property>

					<!-- 
						table就是用来描述第三张表
					 -->
					<set name="courses" table="student_course" cascade="save-update">
						<key>
							<column name="sid"></column>
						</key>
						<many-to-many class="cn.itcast.hiberate.sh.domain.manytomany.Course" column="cid"></many-to-many>
					</set>
				</class>
			</hibernate-mapping>

3、建类 Course.java

public  class  Course  implements  Serializable{
	private Long cid;
	private String cname;
	private String description;	
	private Set<Student> students;
	封装……
}
     写 Course.hbm.xml

				<hibernate-mapping>
					<class name="cn.itcast.hiberate.sh.domain.manytomany.Course">
						<id name="cid" length="5">
							<generator class="increment"></generator>
						</id>
						<property name="cname" length="20"></property>
						<property name="description" length="100"></property>
						
						<set name="students" table="student_course">
							<key>
								<column name="cid"></column>
							</key>
							<many-to-many class="cn.itcast.hiberate.sh.domain.manytomany.Student" column="sid"></many-to-many>
						</set>
					</class>
				</hibernate-mapping>

4、配置文件 hibernate.cfg.xml

			<hibernate-configuration>
				<session-factory>
					<property name="connection.username">root</property>
					<property name="connection.password">root</property>
					<property name="connection.url">
						jdbc:mysql://localhost:3306/itcast_sh_hibernate
					</property>
					<property name="hbm2ddl.auto">update</property>
					<property name="show_sql">true</property>
					<mapping  resource="cn/itcast/hiberate/sh/domain/manytomany/Course.hbm.xml" />
					<mapping  resource="cn/itcast/hiberate/sh/domain/manytomany/Student.hbm.xml" />

				</session-factory>
			</hibernate-configuration>

5、多对多
       5-1关系操作:
            1 多对多谁操作效率都一样。
            2 解除关系:把第三张表的一行数据删除掉。
            3 建立关系:把第三张表的数据增加一行记录。
            4 变更关系:对第三张表执行 update 操作;先删除后增加。
        
        5-2 级联操作:
            都是对象针对集合的操作。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值