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;
        }
    }
  • 相关阅读:
    类的继承,抽象类和接口
    什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
    php 中 SERVER 服务器参数
    数组与对象互换方法
    php实现二维数组查找功能【array_search 和 array_column】
    php基础知识点列表【2020年10月7日】
    json_encode 中文及特殊斜杆的编码
    吴裕雄--天生自然ANDROID开发学习:2.5.8 Notification(状态栏通知)详解
    吴裕雄--天生自然ANDROID开发学习:2.5.7 Toast(吐司)的基本使用
    吴裕雄--天生自然ANDROID开发学习:2.5.6 ViewFlipper(翻转视图)的基本使用
  • 原文地址:https://www.cnblogs.com/rubekid/p/4621975.html
Copyright © 2011-2022 走看看