Hibernate 教程(七)[一对多关系,多对一关系]

准备


一个班级对应多个学生
多个学生对应一个班级

@OneToMany

OneToMany API

CascadeType[]	cascade	
(可选)必须级联到关联目标的操作。

FetchType	fetch	
(可选)是否应该延迟加载关联,或者必须急切地获取关联。

java.lang.String	mappedBy
拥有关系的字段。

boolean	orphanRemoval
(可选)是否将删除操作应用于已从关系中删除的实体,以及是否将删除操作级联到这些实体。

java.lang.Class	targetEntity
(可选)作为关联目标的实体类。

@ManyToOne

ManyToOne API

CascadeType[]	cascade
(可选)必须级联到关联目标的操作。

FetchType	fetch
(可选)是否应该延迟加载关联,或者必须急切地获取关联。

boolean	optional
(可选)关联是否可选。

java.lang.Class	targetEntity
(可选)作为关联目标的实体类。

@JoinTable
JoinTable API

java.lang.String	catalog
(可选)表的目录。

ForeignKey	foreignKey
(可选)当表生成生效时,用于指定或控制与joinColumns元素对应的列的外键约束的生成。

Index[]	indexes
(可选)表的索引。

ForeignKey	inverseForeignKey
(可选)当表生成生效时,用于指定或控制与inverseJoinColumns元素对应的列的外键约束的生成。

JoinColumn[]	inverseJoinColumns
(可选)联接表的外键列,它们引用不拥有关联的实体的主表。

JoinColumn[]	joinColumns
(可选)联接表的外键列,它们引用拥有关联的实体的主表。

java.lang.String	name
(可选)联接表的名称。

java.lang.String	schema
(可选)表的模式。

UniqueConstraint[]	uniqueConstraints
(可选)要放在表上的惟一约束。

数据库数据

/*
 Navicat Premium Data Transfer

 Source Server         : 192.168.1.200
 Source Server Type    : MySQL
 Source Server Version : 80013
 Source Host           : 192.168.1.200:3306
 Source Schema         : Hibernate

 Target Server Type    : MySQL
 Target Server Version : 80013
 File Encoding         : 65001

 Date: 29/12/2018 15:36:49
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class`  (
  `classID` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一标识',
  `className` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '班级名',
  PRIMARY KEY (`classID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES (1, '火力班');
INSERT INTO `class` VALUES (2, '志成班');
INSERT INTO `class` VALUES (3, '自强班');
INSERT INTO `class` VALUES (4, '启航班');

-- ----------------------------
-- Table structure for class_student
-- ----------------------------
DROP TABLE IF EXISTS `class_student`;
CREATE TABLE `class_student`  (
  `studentID` int(11) NULL DEFAULT NULL,
  `classID` int(11) NULL DEFAULT NULL,
  INDEX `stu_fk`(`studentID`) USING BTREE,
  INDEX `cla_fk`(`classID`) USING BTREE,
  CONSTRAINT `cla_fk` FOREIGN KEY (`classID`) REFERENCES `class` (`classid`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `stu_fk` FOREIGN KEY (`studentID`) REFERENCES `student` (`studentid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of class_student
-- ----------------------------
INSERT INTO `class_student` VALUES (1, 1);
INSERT INTO `class_student` VALUES (2, 1);
INSERT INTO `class_student` VALUES (3, 1);
INSERT INTO `class_student` VALUES (4, 1);
INSERT INTO `class_student` VALUES (5, 1);
INSERT INTO `class_student` VALUES (6, 2);
INSERT INTO `class_student` VALUES (7, 2);
INSERT INTO `class_student` VALUES (8, 2);
INSERT INTO `class_student` VALUES (9, 2);
INSERT INTO `class_student` VALUES (10, 2);
INSERT INTO `class_student` VALUES (11, 3);
INSERT INTO `class_student` VALUES (12, 3);
INSERT INTO `class_student` VALUES (13, 3);
INSERT INTO `class_student` VALUES (14, 3);
INSERT INTO `class_student` VALUES (15, 3);
INSERT INTO `class_student` VALUES (16, 4);
INSERT INTO `class_student` VALUES (17, 4);
INSERT INTO `class_student` VALUES (20, 4);
INSERT INTO `class_student` VALUES (18, 4);
INSERT INTO `class_student` VALUES (19, 4);

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `studentID` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一标识',
  `studentName` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学生名',
  PRIMARY KEY (`studentID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '贾德善');
INSERT INTO `student` VALUES (2, '彭万里');
INSERT INTO `student` VALUES (3, '高大山');
INSERT INTO `student` VALUES (4, '谢大海');
INSERT INTO `student` VALUES (5, '马宏宇');
INSERT INTO `student` VALUES (6, '林莽');
INSERT INTO `student` VALUES (7, '黄强辉');
INSERT INTO `student` VALUES (8, '章汉夫');
INSERT INTO `student` VALUES (9, '范长江');
INSERT INTO `student` VALUES (10, '林君雄');
INSERT INTO `student` VALUES (11, '谭平山');
INSERT INTO `student` VALUES (12, '朱希亮');
INSERT INTO `student` VALUES (13, '李四光');
INSERT INTO `student` VALUES (14, '甘铁生');
INSERT INTO `student` VALUES (15, '张伍绍祖');
INSERT INTO `student` VALUES (16, '马继祖');
INSERT INTO `student` VALUES (17, '程孝先');
INSERT INTO `student` VALUES (18, '宗敬先');
INSERT INTO `student` VALUES (19, '年广嗣');
INSERT INTO `student` VALUES (20, '汤绍箕');
INSERT INTO `student` VALUES (21, '吕显祖');
单向一对多

Class

package entity;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Table(name = "class")
@Entity
public class Class {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int classID;

	private String className;

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinTable(name = "class_student", joinColumns = { @JoinColumn(name = "classID") }, inverseJoinColumns = {
			@JoinColumn(name = "studentID") })
	private Set<Student> students;

	public int getClassID() {
		return classID;
	}

	public void setClassID(int classID) {
		this.classID = classID;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public Set<Student> getStudents() {
		return students;
	}

	public void setStudents(Set<Student> students) {
		this.students = students;
	}

}

Student

package entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "student")
@Entity
public class Student {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int studentID;

	private String studentName;

	public int getStudentID() {
		return studentID;
	}

	public void setStudentID(int studentID) {
		this.studentID = studentID;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

}
单向多对一
package entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "class")
@Entity
public class Class {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int classID;

	private String className;


	public int getClassID() {
		return classID;
	}

	public void setClassID(int classID) {
		this.classID = classID;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

}
package entity;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Table(name = "student")
@Entity
public class Student {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int studentID;

	private String studentName;

	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinTable(name = "class_student", joinColumns = { @JoinColumn(name = "studentID") }, inverseJoinColumns = {
			@JoinColumn(name = "classID") })
	private Class clazz;

	public int getStudentID() {
		return studentID;
	}

	public void setStudentID(int studentID) {
		this.studentID = studentID;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public Class getClazz() {
		return clazz;
	}

	public void setClazz(Class clazz) {
		this.clazz = clazz;
	}

}
双向关系

(一对多,多对一)
只能从一端维护关系
Class

package entity.ManyToOne_OneTOMany;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Table(name = "class")
@Entity
public class Class {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int classID;

	private String className;
	
	@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="clazz")
	private Set<Student> students;

	public int getClassID() {
		return classID;
	}

	public void setClassID(int classID) {
		this.classID = classID;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public Set<Student> getStudents() {
		return students;
	}

	public void setStudents(Set<Student> students) {
		this.students = students;
	}

}

Student

package entity.ManyToOne_OneTOMany;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Table(name = "student")
@Entity
public class Student {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int studentID;

	private String studentName;

	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinTable(name = "class_student", joinColumns = { @JoinColumn(name = "studentID") }, inverseJoinColumns = {
			@JoinColumn(name = "classID") })
	private Class clazz;

	public int getStudentID() {
		return studentID;
	}

	public void setStudentID(int studentID) {
		this.studentID = studentID;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public Class getClazz() {
		return clazz;
	}

	public void setClazz(Class clazz) {
		this.clazz = clazz;
	}

}

项目源码

https://download.csdn.net/download/god_father_kao/10885861

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值