• @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;
        }
    }
  • 相关阅读:
    Linux下sed,awk,grep,cut,find学习笔记
    Python文件处理(1)
    KMP详解
    Java引用详解
    解决安卓中页脚被输入法顶起的问题
    解决swfupload上传控件文件名中文乱码问题 三种方法 flash及最新版本11.8.800.168
    null id in entry (don't flush the Session after an exception occurs)
    HQL中的Like查询需要注意的地方
    spring mvc controller间跳转 重定向 传参
    node to traverse cannot be null!
  • 原文地址:https://www.cnblogs.com/rubekid/p/4621975.html
Copyright © 2020-2023  润新知