Hibernate 映射关系

来源:互联网 发布:网上订餐系统源码下载 编辑:程序博客网 时间:2024/06/15 21:16


一.       一对多双向双向即包含了一对多单向和多对一单向的写法

             表结构关系:一端主键对应多端外键

             类结构关系:一端具有多端的集合,多端持有一端实例

    

 以下为部门类为一端:

package com.ly.onetomany.model;//设部门为一端import java.util.Set;public class Department {private int id;private String name;//一端具有多端的集合private Set<Employee> employeelist;public Department() {}public Department(int id, String name) {this.id = id;this.name = name;}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 Set<Employee> getEmployeelist() {return employeelist;}public void setEmployeelist(Set<Employee> employeelist) {this.employeelist = employeelist;}@Overridepublic String toString() {return "Department [id=" + id + ", name=" + name + "]";}}

以下为职员类。设为多端:


package com.ly.onetomany.model;//员工表设为多端public class Employee {private int id;private String name;//员工姓名//多端持有一端实例private Department department;public Employee() {}public Employee(String name) {this.name = name;}public Employee(int id, String name) {this.id = id;this.name = name;}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 Department getDepartment() {return department;}public void setDepartment(Department department) {this.department = department;}@Overridepublic String toString() {return "Employee [id=" + id + ", name=" + name + ", department=" + department + "]";}}

下为一端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><class name="com.ly.onetomany.model.Department" table="department"><id name="id" column="id" type="int"><generator class="native"></generator></id><property name="name" column="name" type="java.lang.String"></property><!-- cascade="save-update"为级联,d_id为生成的外键列名 --><set name="employeelist" table="employee" cascade="save-update"><key><column name="d_id"/></key><!-- 对应的多端路径 --><one-to-many class="com.ly.onetomany.model.Employee" /></set></class></hibernate-mapping>

以下为多端Employee.hnm.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><class name="com.ly.onetomany.model.Employee" table="employee"><id name="id" column="id" type="int"><generator class="native"></generator></id><property name="name" column="name" type="java.lang.String"></property><!-- 以下为多端对应一端的类路径, name="d_id"为相对应的外键列,与一端那设的列名最好保持一致--><many-to-one name="department" class="com.ly.onetomany.model.Department">  <column  name="d_id" /></many-to-one></class></hibernate-mapping>


一对一双向       

            唯一外键关联。本质上是一对多的蜕化形式。在<many-to-one>元素中设置属性unique=”true”就变成了一对一


           以下为person类  ;将一端person类,假设为多端类

           

package com.ly.onetoone.model;public class Person {private int id;private String name;//持有对方实例private IDcard idcard;public Person() {}public Person(int id, String name) {this.id = id;this.name = name;}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 IDcard getIdcard() {return idcard;}public void setIdcard(IDcard idcard) {this.idcard = idcard;}public Person(int id, String name, IDcard idcard) {this.id = id;this.name = name;this.idcard = idcard;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", idcard=" + idcard + "]";}}

    以下为一端IDcard(身份证)类

package com.ly.onetoone.model;public class IDcard {    private int id;    private String card;//身份证    //持有对方实例    private Person person;        public IDcard(int id, String card) {this.id = id;this.card = card;}public IDcard() {}public IDcard(int id, String card, Person person) {this.id = id;this.card = card;this.person = person;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCard() {return card;}public void setCard(String card) {this.card = card;}public Person getPerson() {return person;}public void setPerson(Person person) {this.person = person;}@Overridepublic String toString() {return "IDcard [id=" + id + ", card=" + card + ", person=" + person + "]";}        }

以下为一端假设的多端Person类的  Person.hbm.xml


<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-5-10 15:42:43 by Hibernate Tools 3.5.0.Final --><hibernate-mapping>    <class name="com.ly.onetoone.model.Person" table="person">        <id name="id" type="int">            <column name="id" />            <generator class="native" />        </id>        <property name="name" type="java.lang.String">            <column name="name" />        </property>              <!-- 一对一的唯一外键方法  unique="true"  -->         <many-to-one name="idcard" class="com.ly.onetoone.model.IDcard"  unique="true">           <!-- 外键的列名 -->           <column name="card_id" />                </many-to-one>        </class></hibernate-mapping>


以下为IDcard.hbm.xml;

 

  

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-5-10 15:42:43 by Hibernate Tools 3.5.0.Final --><hibernate-mapping>    <class name="com.ly.onetoone.model.IDcard" table="idcard">        <id name="id" type="int">            <column name="id" />            <generator class="native" />        </id>        <property name="card" type="java.lang.String">            <column name="card" />        </property>        <!-- property-ref是为了解决遗留系统中实体之间的关联。                                   默认情况下,把被关联实体主键字段作为关联字段。有了property-ref,就可以                                   通过它指定被关联实体主键以外的字段作为关联字段。 -->        <one-to-one name="person" class="com.ly.onetoone.model.Person" property-ref="idcard"></one-to-one>    </class></hibernate-mapping>


     

        三多对多双向

 多端Student 类

package com.ly.manytomany.model;import java.util.Set;//学生表,设为多端public class Student { private String sno;//学生编号 private String sname;//学生姓名 private int age;//年龄 private String sex;//性别 ////持有对方多端集合 private Set<Course> courseLists;//课程的集合public Student() {}public Student(String sno, String sname, int age, String sex, Set<Course> courseLists) {this.sno = sno;this.sname = sname;this.age = age;this.sex = sex;this.courseLists = courseLists;}public String getSno() {return sno;}public void setSno(String sno) {this.sno = sno;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Set<Course> getCourseLists() {return courseLists;}public void setCourseLists(Set<Course> courseLists) {this.courseLists = courseLists;}@Overridepublic String toString() {return "Student [sno=" + sno + ", sname=" + sname + ", age=" + age + ", sex=" + sex +   "]";} }

多端course类

package com.ly.manytomany.model;import java.util.Set;//多端课程表public class Course {   private String cno;//课程编号   private String cname;//课程名   private String teacher;//课程老师   //持有对方多端集合   private Set<Student> studentlist; //课程表内的学生集合   public Course() {}public Set<Student> getStudentlist() {return studentlist;}public void setStudentlist(Set<Student> studentlist) {this.studentlist = studentlist;}public Course(String cno, String cname, String teacher) {this.cno = cno;this.cname = cname;this.teacher = teacher;}public String getCno() {return cno;}public void setCno(String cno) {this.cno = cno;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}public String getTeacher() {return teacher;}public void setTeacher(String teacher) {this.teacher = teacher;}@Overridepublic String toString() {return "Course [cno=" + cno + ", cname=" + cname + ", teacher=" + teacher + ", studentlist=" + studentlist + "]";}}


 以下为Student.hbm.xml

  

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-5-10 21:03:52 by Hibernate Tools 3.5.0.Final --><hibernate-mapping>    <class name="com.ly.manytomany.model.Student" table="student">        <id name="sno" type="java.lang.String">            <column name="sno" />            <generator class="native" />        </id>        <property name="sname" type="java.lang.String">            <column name="sname" />        </property>        <property name="age" type="int">            <column name="age" />        </property>        <property name="sex" type="java.lang.String">            <column name="sex" />        </property>        <!-- 多端集合  table="sc"为中间表表名  -->        <set name="courseLists" table="sc" >            <key>            <!-- sno为student表在中间表的字段 -->                <column name="sno" />            </key>            <!-- cno为course表在中间表sc中的字段 -->            <many-to-many class="com.ly.manytomany.model.Course"  column="cno"/>        </set>    </class></hibernate-mapping>

以下为Course.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-5-10 21:03:52 by Hibernate Tools 3.5.0.Final --><hibernate-mapping>    <class name="com.ly.manytomany.model.Course" table="course">        <id name="cno" type="java.lang.String">            <column name="cno" />            <generator class="native" />        </id>        <property name="cname" type="java.lang.String">            <column name="cname" />        </property>        <property name="teacher" type="java.lang.String">            <column name="teacher" />        </property>         <!-- 多端集合  table="sc"为中间表表名  -->        <set name="studentlist"  table="sc">           <key >         <!-- cno为course表在中间表sc中的字段 -->               <column name="cno"></column>           </key>           <!-- sno为student表在中间表的字段 -->           <many-to-many class="com.ly.manytomany.model.Student" column="sno"/>        </set>     </class></hibernate-mapping>



1 0
原创粉丝点击