Hibernate 映射关系


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

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

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

    

 以下为部门类为一端:

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;
}
@Override
public 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;
}

@Override
public 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;
	}

	@Override
	public 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;
	}
	@Override
	public 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;
}
@Override
public 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;
}
@Override
public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值