zoukankan      html  css  js  c++  java
  • @ManyToMany中间表附加字段设计

    在使用@ManyToMany时,若中间表只有相应的外键字段可以直接建立两个对应的Entity 设置ManyToMany

    @ManyToMany 两个表多对多关联

    但若是中间表有自己的附加字段,这需要为中间表建立Entity

    具体如下:

    Teacher <=> Student 中间表 teacher_student 附加字段 id(自增),siteId(站点id方便批删除)

    增加 Teacher <=> Student 关联时,增加新的TeacherStudent

    Entity:

    @Entity
    @Table(name = "teacher")
    public class Teacher {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
        
        @Column(name = "name")
        private String name;
        
        @Column(name = "age")
        private int age;
        
        @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.LAZY)
        @JoinTable(name="teacher_student",joinColumns={@JoinColumn(name="tid")},inverseJoinColumns={@JoinColumn(name="sid")})
        private Set<Student> students;
        
        @OneToMany(mappedBy="teacher", fetch = FetchType.LAZY)
        private Set<TeacherStudent> teacherStudents;
    
        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 int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Set<Student> getStudents() {
            return students;
        }
    
        public void setStudents(Set<Student> students) {
            this.students = students;
        }
    
        public Set<TeacherStudent> getTeacherStudents() {
            return teacherStudents;
        }
    
        public void setTeacherStudents(Set<TeacherStudent> teacherStudents) {
            this.teacherStudents = teacherStudents;
        }
    }
    @Entity
    @Table(name = "student")
    public class Student {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
        
        @Column(name = "name")
        private String name;
        
        @Column(name = "age")
        private int age;
        
        @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.LAZY)
        @JoinTable(name="teacher_student", joinColumns={@JoinColumn(name="sid")}, inverseJoinColumns={@JoinColumn(name="tid")})
        private Set<Teacher> teachers;
        
        
        @OneToMany(mappedBy="student", fetch = FetchType.LAZY)
        private Set<TeacherStudent> teacherStudents;
    
        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 int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Set<Teacher> getTeachers() {
            return teachers;
        }
    
        public void setTeachers(Set<Teacher> teachers) {
            this.teachers = teachers;
        }
    
        public Set<TeacherStudent> getTeacherStudents() {
            return teacherStudents;
        }
    
        public void setTeacherStudents(Set<TeacherStudent> teacherStudents) {
            this.teacherStudents = teacherStudents;
        }
    }

    中间表

    @Entity
    @Table(name = "teacher_student")
    public class TeacherStudent {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
        
        @ManyToOne(fetch = FetchType.LAZY)
        @Cascade(value = CascadeType.SAVE_UPDATE)
        @JoinColumn(name="tid")
        private Teacher teacher;
        
        @ManyToOne(fetch = FetchType.LAZY)
        @Cascade(value = CascadeType.SAVE_UPDATE)
        @JoinColumn(name="sid")
        private Student student;
        
        @JoinColumn
        private int siteId;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public Teacher getTeacher() {
            return teacher;
        }
    
        public void setTeacher(Teacher teacher) {
            this.teacher = teacher;
        }
    
        public Student getStudent() {
            return student;
        }
    
        public void setStudent(Student student) {
            this.student = student;
        }
    
        public int getSiteId() {
            return siteId;
        }
    
        public void setSiteId(int siteId) {
            this.siteId = siteId;
        }
    }
  • 相关阅读:
    有些文件不需要配置,只需要放到resources下面
    RAFT算法
    HBase,region以及HFile概念
    GitHub搭建个人网站续
    sublime text 2 安装emmet插件
    前端收录
    Zepto
    将复杂form表单序列化serialize-object.js
    PHP 清除HTML代码、空格、回车换行符的函数
    Yii2 选择布局的方式
  • 原文地址:https://www.cnblogs.com/rubekid/p/4621975.html
Copyright © 2011-2022 走看看