接上篇.
One to many(many to One):
1.many to one:
Department:
package com.wsy.domain; import java.io.Serializable; import java.util.Set; public class Department implements Serializable{ private static final long serialVersionUID = 1L; private Integer id; private String name; private Set<Student> stud; public Set<Student> getStud() { return stud; } public void setStud(Set<Student> stud) { this.stud = stud; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Student:
package com.wsy.domain; import java.io.Serializable; public class Student implements Serializable{ private static final long serialVersionUID = 1L; private Integer id; private String name; private Department dept; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Department getDept() { return dept; } public void setDept(Department dept) { this.dept = dept; } }
Department.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"> <hibernate-mapping package="com.wsy.domain"> <class name="Department" table="department"> <id name="id" column="id" type="java.lang.Integer"> <generator class="increment"></generator> </id> <property name="name" type="java.lang.String"> <column name="name" length="64" not-null="true"></column> </property> <!-- stud为Department成员名 --> <set name="stud" cascade="save-update"> <!-- 设置one to many,pojo表属性添加Set成员(并非HashSet,由hibernate重写)--> <key column="dept_id"></key><!-- 此处column 和Student外键名,保持一致 --> <one-to-many class="Student"/> </set> </class> </hibernate-mapping>
Student.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"> <hibernate-mapping package="com.wsy.domain"> <class name="Student" table="student"> <id name="id" column="id" type="java.lang.Integer"> <generator class="increment"></generator> </id> <property name="name" type="java.lang.String"> <column name="name" not-null="false"></column> </property> <!-- 设置many to one,dept为Student成员名,dept_id为外键属性 --> <many-to-one name="dept" column="dept_id"></many-to-one> </class> </hibernate-mapping>
测试程序:
如果没有设置级联操作,则通过many to one 一侧添加数据,session会话保存两侧.
如果在one to many侧设置级联操作,则通过one to many侧添加数据,session会话保存one to many侧.
级联设置在one to many侧,cascade="delete" or cascade="save-update".
many to many:
many to many 通常需要建立第三张表,将many to many 简化成两个one to many && many to one.
POJO:
Course:(one to many)
package com.wsy.domain; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class Course implements Serializable{ private static final long serialVersionUID = 1L; private Integer cid; private String cname; private Integer ccredit; private Set stucourses = new HashSet(0); public Integer getCid() { return cid; } public void setCid(Integer cid) { this.cid = cid; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public Integer getCcredit() { return ccredit; } public void setCcredit(Integer ccredit) { this.ccredit = ccredit; } public Set getStucourses() { return stucourses; } public void setStucourses(Set stucourses) { this.stucourses = stucourses; } }
Student:(one to many)
package com.wsy.domain; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class Student implements Serializable{ private static final long serialVersionUID = 1L; private Integer sid; private String sname; private String ssex; private String sdept; private Integer sage; private String saddress; private Set stucourses = new HashSet(0); public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSsex() { return ssex; } public void setSsex(String ssex) { this.ssex = ssex; } public String getSdept() { return sdept; } public void setSdept(String sdept) { this.sdept = sdept; } public Integer getSage() { return sage; } public void setSage(Integer sage) { this.sage = sage; } public String getSaddress() { return saddress; } public void setSaddress(String saddress) { this.saddress = saddress; } public Set getStucourses() { return stucourses; } public void setStucourses(Set stucourses) { this.stucourses = stucourses; } }
Stucourse:(many to one)
package com.wsy.domain; import java.io.Serializable; public class Stucourse implements Serializable{ private static final long serialVersionUID = 1L; private Integer stuCoureseId; private Student student; private Course course; private Integer grade; public Integer getStuCoureseId() { return stuCoureseId; } public void setStuCoureseId(Integer stuCoureseId) { this.stuCoureseId = stuCoureseId; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } public Integer getGrade() { return grade; } public void setGrade(Integer grade) { this.grade = grade; } }
Student.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"> <hibernate-mapping package="com.wsy.domain"> <class name="Student" table="student"> <id name="sid" column="sid" type="java.lang.Integer"> <generator class="assigned"></generator> </id> <property name="sname" type="java.lang.String"> <column name="sname" length="15" not-null="true" /> </property> <property name="ssex" type="java.lang.String"> <column name="ssex" length="2" not-null="false" /> </property> <property name="sdept" type="java.lang.String"> <column name="sdept" length="10" not-null="false" /> </property> <property name="sage" type="java.lang.Integer"> <column name="sage" not-null="false"/> </property> <property name="saddress" type="java.lang.String"> <column name="saddress" length="45" not-null="false"/> </property> <set name="stucourses" inverse="true"> <key> <column name="sid" /> </key> <one-to-many class="Stucourse" /> </set> </class> </hibernate-mapping>
Course.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"> <hibernate-mapping package="com.wsy.domain"> <class name="Course" table="course"> <id name="cid" type="java.lang.Integer"> <generator class="assigned"></generator> </id> <property name="cname" type="java.lang.String"> <column name="cname"></column> </property> <property name="ccredit" type="java.lang.Integer"> <column name="ccredit" not-null="false"/> </property> <set name="stucourses"> <key> <column name="cid" /> </key> <one-to-many class="Stucourse" /> </set> </class> </hibernate-mapping>
Stucourse.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"> <hibernate-mapping package="com.wsy.domain"> <class name="Stucourse" table="stucourse"> <id name="stuCoureseId" type="java.lang.Integer"> <generator class="increment"></generator> </id> <property name="grade" type="java.lang.Integer"> <column name="grade" not-null="false"></column> </property> <many-to-one name="course" column="cid"></many-to-one> <many-to-one name="student" column="sid"></many-to-one> </class> </hibernate-mapping>
以上代码经测试可以运行.