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
- hibernate映射关系一对一映射
- Hibernate关系映射
- Hibernate 继承关系映射
- Hibernate关系映射
- Hibernate 映射关系
- Hibernate组合映射关系
- Hibernate关系映射详解
- Hibernate 关系映射
- hibernate映射关系理解
- hibernate--关系映射CRUD
- Hibernate关系映射
- Hibernate关系映射
- hibernate映射关系
- hibernate映射关系
- Hibernate映射组成关系
- hibernate 的映射关系
- Hibernate关系映射一对一
- Hibernate关系映射详解
- Qt程序打包发布——插件发布
- Android 滑动
- 01.struts简介及学习方法
- kali 2016 Metasploit启动
- 重写gensim.word2vec的文本相似度匹配函数(wmdistance)
- Hibernate 映射关系
- vue.js 初体验— Chrome 插件开发实录
- Android Studio创建模拟器中的问题
- 解决Nginx下ThinkPHP框架中的U方法失效问题
- FreeBSD root远程登录
- 奇怪的股市(Hell on the Markets,ACM/ICPC NEERC 2008, UVa1614)
- nginx的安装&配置静态文件访问
- Android开发中拷贝db文件写入SQLite
- Ubuntu Kylin 16.04安装配置FTP服务器