Hibernate常见操作二

接上篇.

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>


以上代码经测试可以运行.

 

posted @ 2016-11-05 21:41  Maskisland  阅读(162)  评论(0编辑  收藏  举报