有两个实Student和Course,他们之间的关系是多对多,在数据库上,为了满足3NF,会建立一个中间表Stu_Course来维护Student和Course之间的关系,在Hibernate中,则使用双向多对多来体现这种结构
数据库脚本
create
table
stu(id
varchar
(
32
)
primary
key
,name
varchar
(
32
),cardid
varchar
(
32
),age
int
);
create table course(id varchar ( 32 ) primary key ,name varchar ( 32 ));
create table stu_course(stu_id varchar ( 32 ),course_id varchar ( 32 ));
insert into stu values (" 1 ","tom"," 200701 ", 11 );
insert into stu values (" 2 ","tomclus"," 200702 ", 11 );
insert into stu values (" 3 ","spark"," 200703 ", 11 );
insert into stu values (" 4 ","jerry"," 200704 ", 11 );
insert into course values (" 1 ","history");
insert into course values (" 2 ","computer");
insert into course values (" 3 ","music");
insert into course values (" 4 ","encomic");
insert into course values (" 5 ","politics");
insert into stu_course values (" 2 "," 1 ");
insert into stu_course values (" 2 "," 2 ");
insert into stu_course values (" 2 "," 3 ");
insert into stu_course values (" 1 "," 3 ");
insert into stu_course values (" 1 "," 4 ");
insert into stu_course values (" 3 "," 2 ");
insert into stu_course values (" 3 "," 3 ");
create table course(id varchar ( 32 ) primary key ,name varchar ( 32 ));
create table stu_course(stu_id varchar ( 32 ),course_id varchar ( 32 ));
insert into stu values (" 1 ","tom"," 200701 ", 11 );
insert into stu values (" 2 ","tomclus"," 200702 ", 11 );
insert into stu values (" 3 ","spark"," 200703 ", 11 );
insert into stu values (" 4 ","jerry"," 200704 ", 11 );
insert into course values (" 1 ","history");
insert into course values (" 2 ","computer");
insert into course values (" 3 ","music");
insert into course values (" 4 ","encomic");
insert into course values (" 5 ","politics");
insert into stu_course values (" 2 "," 1 ");
insert into stu_course values (" 2 "," 2 ");
insert into stu_course values (" 2 "," 3 ");
insert into stu_course values (" 1 "," 3 ");
insert into stu_course values (" 1 "," 4 ");
insert into stu_course values (" 3 "," 2 ");
insert into stu_course values (" 3 "," 3 ");
POJO:
package
Relation.ManytoMany;
import java.util.Set;
public class Stu {
private String id;
private String cardid;
private String name;
private int age;
private Set course;
public Set getCourse() {
return course;
}
public void setCourse(Set course) {
this .course = course;
}
public String getId() {
return id;
}
public void setId(String id) {
this .id = id;
}
public String getCardid() {
return cardid;
}
public void setCardid(String cardid) {
this .cardid = cardid;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
}
package Relation.ManytoMany;
import java.util.HashSet;
import java.util.Set;
public class Course {
private String id;
private Set students;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this .id = id;
}
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this .students = students;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
}
import java.util.Set;
public class Stu {
private String id;
private String cardid;
private String name;
private int age;
private Set course;
public Set getCourse() {
return course;
}
public void setCourse(Set course) {
this .course = course;
}
public String getId() {
return id;
}
public void setId(String id) {
this .id = id;
}
public String getCardid() {
return cardid;
}
public void setCardid(String cardid) {
this .cardid = cardid;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
}
package Relation.ManytoMany;
import java.util.HashSet;
import java.util.Set;
public class Course {
private String id;
private Set students;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this .id = id;
}
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this .students = students;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
}
Hibernate.cfg.xml
<?
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:mysql://localhost:3306/schoolproject?characterEncoding=gb2312 & useUnicode=true
</ property >
< property name ="dialect" >
org.hibernate.dialect.MySQLDialect
</ property >
< property name ="myeclipse.connection.profile" > mysql </ property >
< property name ="connection.password" > 1234 </ property >
< property name ="connection.driver_class" >
com.mysql.jdbc.Driver
</ property >
< property name ="hibernate.dialect" >
org.hibernate.dialect.MySQLDialect
</ property >
< property name ="hibernate.show_sql" > true </ property >
< property name ="current_session_context_class" > thread </ property >
< property name ="jdbc.batch_size" > 15 </ property >
< mapping resource ="Relation/ManytoMany/Course.hbm.xml" />
< mapping resource ="Relation/ManytoMany/Stu.hbm.xml" />
</ session-factory >
</ hibernate-configuration >
<! 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:mysql://localhost:3306/schoolproject?characterEncoding=gb2312 & useUnicode=true
</ property >
< property name ="dialect" >
org.hibernate.dialect.MySQLDialect
</ property >
< property name ="myeclipse.connection.profile" > mysql </ property >
< property name ="connection.password" > 1234 </ property >
< property name ="connection.driver_class" >
com.mysql.jdbc.Driver
</ property >
< property name ="hibernate.dialect" >
org.hibernate.dialect.MySQLDialect
</ property >
< property name ="hibernate.show_sql" > true </ property >
< property name ="current_session_context_class" > thread </ property >
< property name ="jdbc.batch_size" > 15 </ property >
< mapping resource ="Relation/ManytoMany/Course.hbm.xml" />
< mapping resource ="Relation/ManytoMany/Stu.hbm.xml" />
</ session-factory >
</ hibernate-configuration >
Stu.hbm.xml
<?
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" >
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
< hibernate-mapping >
< class name ="Relation.ManytoMany.Stu" table ="stu" >
< id name ="id" unsaved-value ="null" >
< generator class ="uuid.hex" ></ generator >
</ id >
< property name ="cardid" type ="string" />
< property name ="name" type ="string" />
< property name ="age" type ="int" />
&nb
<! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
< hibernate-mapping >
< class name ="Relation.ManytoMany.Stu" table ="stu" >
< id name ="id" unsaved-value ="null" >
< generator class ="uuid.hex" ></ generator >
</ id >
< property name ="cardid" type ="string" />
< property name ="name" type ="string" />
< property name ="age" type ="int" />
&nb