EJB笔记三 many to many

来源:互联网 发布:智能投顾软件 编辑:程序博客网 时间:2024/05/29 04:49
多对多关系采用 中间表连接的映射策略。建立的中间表将分别引入两边的主键做为外键
@SuppressWarnings("serial")
@Entity
@Table(name 
= "Student")
public class Student implements Serializable{
    
private Integer studentid;
    
private String StudentName;    
    
private Set<Teacher> teachers = new HashSet<Teacher>();
  
    
public Student() {}
    
    
public Student(String studentName) {
        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) {
        StudentName 
= studentName;
    }

    
    @ManyToMany(mappedBy 
= "students"//mappedBy定义了student为双向关系的维护端
    public Set<Teacher> getTeachers() {
        
return teachers;
    }

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

}

 

 

@SuppressWarnings("serial")
@Entity
@Table(name 
= "Teacher")
public class Teacher implements Serializable{
    
private Integer teacherid;
    
private String TeacherName;    
    
private Set<Student> students = new HashSet<Student>();
  
    
public Teacher() {}
    
    
public Teacher(String teacherName) {
        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) {
        TeacherName 
= teacherName;
    }

    
    @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)) {
             
this.students.add(student);
        }

    }


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

原创粉丝点击