接着上一篇多对一继续
此篇中因为一对多和多对多十分相似 所以写到一起
上代码
Student.java
public class Student {
private int id;
private String name;
private int age;
// 保存班级
private Set<Clazz> clazz = new HashSet<>();
public Set<Clazz> getClazz() {
return clazz;
}
public void setClazz(Set<Clazz> clazz) {
this.clazz = clazz;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void setAge(int age) {
this.age = age;
}
public Student(int id) {
this.id = id;
}
// 空参构造
public Student() {
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
Clazz.java
public class Clazz {
private int id;
private String name;
//添加学生
private Set<Student> stu=new HashSet<>();
public Set<Student> getStu() {
return stu;
}
public void setStu(Set<Student> stu) {
this.stu = stu;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Clazz() {}
public Clazz(String name) {
this.name = name;
}
}
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<!-- 自动创建表 -->
<property name="hbm2ddl.auto">create</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<mapping resource="com/gxxy/student/domain/Student.hbm.xml"/>
<mapping resource="com/gxxy/student/domain/Clazz.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Student.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.gxxy.student.domain.Student" table="Student">
<id name="id" column="s_id">
<generator class="native"></generator>
</id>
<property name="name" column="s_name"/>
<property name="age" column="s_age"/>
<!-- 找到对应的clazz集合 对应到表t_c -->
<set name="clazz" table="t_c">
<key column="s_id"/>
<!-- 找到对应的Clazz类 对应到c_id -->
<many-to-many class="com.gxxy.student.domain.Clazz" column="c_id"/>
</set>
</class>
</hibernate-mapping>
Clazz.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.gxxy.student.domain.Clazz" table="Clazz">
<id name="id" column="c_id">
<generator class="native"></generator>
</id>
<property name="name" column="s_name"/>
<!-- 找到对应的stu集合 对应到表t_c -->
<set name="stu" table="t_c">
<key column="c_id"/>
<!-- 找到对应的Student类 对应到s_id -->
<many-to-many class="com.gxxy.student.domain.Student" column="s_id"/>
</set>
</class>
</hibernate-mapping>
最后俩个配置文件中,千万要注意在<set>标签中加入table属性
并且要一样,这样才会在同一张表中创建关联
再一对多关系中,与多对多相似,需要一个
<set>标签在设置
<one-to-many/>标签
结果: