hibernate多对多 关联映射(many-to-many)
在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型;
hibernate会为我们创建中间关联表,转换成两个一对多。
(1)一个最简单的例子就是学生选课的数据表了
(2)student.java
1
2
3
4
5
6
|
public class course {
private integer id;
private string name;
private set<stucourse> stucourses;
//get/set方法
}
|
(3)student.java
1
2
3
4
5
6
|
public class student {
private integer id;
private string name;
private set<stucourse> stucourses;
<span style= "font-family: arial, helvetica, sans-serif;" > //get/set方法</span>
}
|
(4)stucourse.java学生选课表
1
2
3
4
5
6
7
8
|
package com.hsp.domain;
public class stucourse {
private integer id;
private student student;
private course course;
private integer grade;
//get/set方法
}
|
(5)course.hbm.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?xml version= "1.0" encoding= "utf-8" ?>
<!doctype hibernate-mapping public "-//hibernate/hibernate mapping dtd 3.0//en"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package = "com.hsp.domain" >
< class name= "course" >
<id name= "id" type= "java.lang.integer" >
<generator class = "sequence" >
<param name= "sequence" >course_seq</param>
</generator>
</id>
<property name= "name" type= "java.lang.string" >
<column name= "name" length= "64" />
</property>
<!-- 配置one-to-many 表示一门课程可以对应多个选课记录 -->
<set name= "stucourses" >
<key column= "course_id" />
<one-to-many class = "stucourse" />
</set>
</ class >
</hibernate-mapping>
|
(6)student.hbm.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?xml version= "1.0" encoding= "utf-8" ?>
<!doctype hibernate-mapping public "-//hibernate/hibernate mapping dtd 3.0//en"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package = "com.hsp.domain" >
< class name= "student" >
<id name= "id" type= "java.lang.integer" >
<generator class = "sequence" >
<param name= "sequence" >stu_seq</param>
</generator>
</id>
<property name= "name" type= "java.lang.string" >
<column name= "name" length= "64" />
</property>
<!-- 这里我们配置了one-to-many 一个学生可以对应多个选课记录 -->
<set name= "stucourses" >
<key column= "student_id" /> <!-- 这里的column是外键 -->
<one-to-many class = "stucourse" /> <!-- many所对应的表 -->
</set>
</ class >
</hibernate-mapping>
|
(7)stucourse.hbm.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?xml version= "1.0" encoding= "utf-8" ?>
<!doctype hibernate-mapping public "-//hibernate/hibernate mapping dtd 3.0//en"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package = "com.hsp.domain" >
< class name= "stucourse" >
<id name= "id" type= "java.lang.integer" >
<generator class = "sequence" >
<param name= "sequence" >stucourse_seq</param>
</generator>
</id>
<property name= "grade" type= "java.lang.integer" >
<column name= "grade" length= "3" />
</property>
<many-to-one name= "course" column= "course_id" />
<many-to-one name= "student" column= "student_id" />
</ class >
</hibernate-mapping>
|
(8)hibernate.cfg.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?xml version= '1.0' encoding= 'utf-8' ?>
<!doctype hibernate-configuration public
"-//hibernate/hibernate configuration dtd 3.0//en"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<!-- generated by myeclipse hibernate tools. -->
<hibernate-configuration>
<session-factory>
<property name= "connection.username" >root</property>
<property name= "connection.url" >
jdbc:oracle:thin: @127 .0. 0.1 : 1521 :oracledb
</property>
<property name= "dialect" >
org.hibernate.dialect.oracle9dialect
</property>
<property name= "connection.password" >root</property>
<property name= "connection.driver_class" >
oracle.jdbc.driver.oracledriver
</property>
<property name= "show_sql" > true </property>
<!-- 配置让hibernate自动创建关系模型(表) -->
<property name= "hbm2ddl.auto" >update</property>
<mapping resource= "com/hsp/domain/course.hbm.xml" />
<mapping resource= "com/hsp/domain/stucourse.hbm.xml" />
<mapping resource= "com/hsp/domain/student.hbm.xml" />
</session-factory>
</hibernate-configuration>
|
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/huanglong1218/article/details/52313047