`
lym6520
  • 浏览: 705765 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

实体关系之@ManyToMany

阅读更多
Student.java
package com.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name = "Student")
public class Student implements Serializable {
	
	private Integer studentid;//学生ID
	private String studentName;//学生姓名
	private Set<Teacher> teachers = new HashSet<Teacher>();//对应的教师集合

	public Student() {
	}

	public Student(String studentName) {
		this.studentName = studentName;
	}

	@Id
	@GeneratedValue
	public Integer getStudentid() {
		return studentid;
	}

	public void setStudentid(Integer studentid) {
		this.studentid = studentid;
	}

	@Column(nullable = false, length = 32)
	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	
	/*
	 * @ManyToMany 注释表示Student是多对多关系的一边,mappedBy 属性定义了Student 为双向关系的维护端
	 */
	@ManyToMany(mappedBy = "students")
	public Set<Teacher> getTeachers() {
		return teachers;
	}

	public void setTeachers(Set<Teacher> teachers) {
		this.teachers = teachers;
	}
}



Teacher.java
package com.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.JoinColumn;

@Entity
@Table
public class Teacher implements Serializable {

	private Integer teacherid;// 教师ID
	private String teacherName;// 教师姓名
	private Set<Student> students = new HashSet<Student>();// 对应的学生集合

	public Teacher() {

	}

	public Teacher(String teacherName) {
		this.teacherName = teacherName;
	}

	@Id
	@GeneratedValue
	public Integer getTeacherid() {
		return teacherid;
	}

	public void setTeacherid(Integer teacherid) {
		this.teacherid = teacherid;
	}

	@Column(nullable = false, length = 32)
	public String getTeacherName() {
		return teacherName;
	}

	public void setTeacherName(String teacherName) {
		this.teacherName = teacherName;
	}
	/*
	 * @ManyToMany 注释表示Teacher 是多对多关系的一端。
	 * @JoinTable 描述了多对多关系的数据表关系,name属性指定中间表名称。
	 * joinColumns 定义中间表与Teacher 表的外键关系,中间表Teacher_Student的Teacher_ID 列是Teacher 表的主键列对应的外键列。
	 * inverseJoinColumns 属性定义了中间表与另外一端(Student)的外键关系。
	 */
	@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
	@JoinTable(name = "Teacher_Student", 
			joinColumns ={@JoinColumn(name = "teacher_ID", referencedColumnName = "teacherid") }, 
			inverseJoinColumns = { @JoinColumn(name = "student_ID", referencedColumnName = "studentid") 
	})
	public Set<Student> getStudents() {
		return students;
	}

	public void setStudents(Set<Student> students) {
		this.students = students;
	}
	
	public void addStudent(Student student) {
		if (!this.students.contains(student)) {//检测在该散列表中某些键是否映射到指定值,value 查找的值。如果某些键映射到该散列表中的值为true,否则false
			this.students.add(student);
		}
	}

	public void removeStudent(Student student) {
		this.students.remove(student);
	}

}
5
0
分享到:
评论
3 楼 zlf3865072 2014-05-27  
112233
2 楼 xman_bsn 2012-07-27  
只在一边@JoinTable是不够的。。。
1 楼 lym6520 2009-01-10  
 @ManyToMany 注释表示Teacher 是多对多关系的一端。
 @JoinTable 描述了多对多关系的数据表关系,name属性指定中间表名称。joinColumns 定义中间表与Teacher 表的外键关系,中间表Teacher_Student的Teacher_ID 列是Teacher 表的主键列对应的外键列。 inverseJoinColumns 属性定义了中间表与另外一端(Student)的外键关系。
Teacher.class
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
joinColumns ={@JoinColumn(name = "teacher_ID", referencedColumnName = "teacherid") },
inverseJoinColumns = { @JoinColumn(name = "student_ID", referencedColumnName = "studentid")
})
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}

 @ManyToMany 注释表示Student是多对多关系的一边,mappedBy 属性定义了Student 为双向关系的维护端
Student.class
@ManyToMany(mappedBy = "students")
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}

相关推荐

    manytomany注解模式.rar

    在Java的持久化框架Hibernate中,`@ManyToMany`注解是用于处理数据库中的多对多(Many-to-Many)关系。多对多关系是指一个实体可以与多个其他实体相关联,反之亦然。这种关系在数据库表设计中通常通过中间表来实现,...

    hibernate5_ManyToMany多对多单向维护

    在`User`实体中,我们使用`@ManyToMany`注解来声明多对多关联,并通过`@JoinTable`注解指定中间表`user_roles`,以及两个实体在中间表中的对应列。 2. 定义`Role`实体: ```java @Entity public class Role { ...

    springboot 1.5.2 jpa ManyToMany Demo

    在Java对象模型中,ManyToMany关系表示两个实体之间存在多对多的关系。例如,一个学生可以选修多门课程,而一门课程也可以被多个学生选修。在JPA中,这种关系通常通过一个中间表来实现,该表包含两个外键,分别指向...

    hibernate对象三状态及OneToOne&OneToMany&ManyToMany

    本篇将详细阐述Hibernate中的对象三状态、一对一(OneToOne)、一对多(OneToMany)以及多对多(ManyToMany)关系映射。 一、Hibernate对象三状态 1. 游离态(Detached):对象在应用程序中创建,但尚未与Session...

    hibernate中manytomany的例子

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,允许一个实体实例对应多个其他实体实例,反之亦然。本例子将深入探讨如何在Hibernate中设置并管理多对多关系。 首先,我们...

    SpringBoot-SpringData-ManyToMany

    在Spring Boot和Spring Data的框架下,`ManyToMany`关系是一种常见的数据库模型,用于表示两个实体之间多对多的关系。这种关系意味着一个实体可以与多个其他实体相关联,反之亦然。例如,用户和角色之间的关系,一个...

    manytomany关系

    在Java持久化框架Hibernate中,ManyToMany关系是一种重要的关联类型,它表示两个实体类之间可能存在多个实例互相关联的情况。例如,一个学生可以选修多门课程,一门课程也可以被多个学生选修,这就是典型的...

    JPA课程manyToMany OneToMany 等全部测试

    在数据库设计中,`ManyToMany`关系表示两个实体之间存在多对多的关系。例如,学生可以选修多门课程,而课程也可以被多个学生选修。在JPA中,我们可以使用`@ManyToMany`注解来定义这种关系。这个注解通常需要配合`@...

    Hibernate多对多双向关联(annotation/xml)

    在上面的例子中,`@ManyToMany`注解表明了两个实体间的多对多关系,`mappedBy`属性用于指定反向关联的属性名,`@JoinTable`则定义了中间表的详细信息,包括表名、外键列名等。 如果选择使用XML配置文件,你需要在两...

    JPA学习总结(四)--JPAManyToMany双向关联

    本篇我们将深入探讨JPA中的多对多双向关联,即`@ManyToMany`关系。 在关系数据库中,多对多关联是最复杂的一种关系类型,它可以表示两个实体之间无序的、可重复的关系。例如,一个学生可以选修多门课程,一门课程也...

    spring jpa ManyToMany原理及用法详解

    Spring JPA 中的 ManyToMany 关系是一种复杂的关系,它允许一个实体与多个其他实体发生关系。在本文中,我们将详细介绍 Spring JPA ManyToMany 关系的原理及用法。 首先,JPA 中所有的关系都是单向的,这意味着关系...

    HIbernate-ManytoMany:HIbernate-ManytoMany 不同实体之间的关系

    在这个例子中,`Student`实体与`Course`实体之间存在多对多关系,`@ManyToMany`注解定义了这个关联。`mappedBy`属性用于指定反向关联的属性名,而`@JoinTable`则定义了中间表的详细信息。 **二、中间表的自动创建**...

    JPA中的多对多双向关联实体定义与注解设置

    在Java Persistence API (JPA) 中,多对多(ManyToMany)关系是表示两个实体之间复杂关联的一种方式。这种关联允许一个实体实例可以与多个其他实体实例相关联,反之亦然。例如,一个学生可以选修多门课程,一门课程...

    hibernate 一对一 多对多的关系

    在上面的例子中,Course和Student实体通过`@ManyToMany`注解建立了多对多关系,中间表`course_students`由`@JoinTable`定义,`joinColumns`和`inverseJoinColumns`分别表示Course和Student的外键。 对于**源码解析*...

    Hibernate Many-To-Many Mapping Annotations

    在Java的持久化框架Hibernate中,Many-to-Many映射是一种常见的关系模型,它用于表示两个实体类之间多对多的关系。在这个主题中,我们将深入探讨如何使用注解来实现这种映射,以及其背后的数据库原理和实际应用。 ...

    hibernate 多对多源代码

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,它允许一个实体实例对应多个其他实体实例,反之亦然。本篇将深入探讨Hibernate如何处理这种复杂的数据关联。 一、多对多关系...

    hibernate 映射关系学习入门 多对多实体映射

    在Java世界中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务...在实际编程时,注意合理设计实体关系,确保数据的一致性和完整性,同时利用Hibernate的便捷性提高开发效率。

    Hibenrate之多对多关联

    当删除一个实体时,如果设置了级联策略,那么与之关联的其他实体也可能被删除。因此,在实际开发中要谨慎处理级联操作,避免数据丢失。 此外,多对多关联还涉及到关联的懒加载和急加载策略。默认情况下,Hibernate...

    jpa-day3-manytomany.zip

    在Spring Data JPA中,多对多关联是数据库表间关系的一种常见表示,它允许一个实体实例与多个其他实体实例相互关联。在这个“jpa-day3-manytomany.zip”压缩包中,我们很可能会找到一个关于如何在Spring Data JPA中...

    jpa的实体映射关系7种

    这种关系中,一个实体可以有多个其他实体与之关联,但被关联的实体并不知道这个关系。通过`@OneToMany`注解来表示,可使用`mappedBy`属性定义关联的集合属性。 4. **双向一对多**: 双向一对多关系中,一方实体...

Global site tag (gtag.js) - Google Analytics