복붙노트

[SPRING] Join 테이블의 추가 속성을 위해 많은 수의 최대 절전 모드 매핑을 만드는 방법은 무엇입니까?

SPRING

Join 테이블의 추가 속성을 위해 많은 수의 최대 절전 모드 매핑을 만드는 방법은 무엇입니까?

나는 3 가지 조인이 필요한 많은 수의 하이버 네이트 매핑을 필요로한다. LecturerCourse와 같은 중간 엔티티가없는 솔루션을 찾으려고 노력했습니다.

강사와 강좌 테이블간에 데이터베이스에 많은 관계가 있습니다. 강의는 여러 명의 강사가 진행할 수 있으며 강사는 여러 과목을 개설 할 수 있습니다.

나는 수중에 보관 된 코스가있다. 그러나 강사에게 강좌를 할당해야합니다. 코스를 지정하면 해당 코스의 용량도 저장합니다.

내 데이터베이스 다이어그램 :

나는 최대 절전 모드와 봄을 사용한다. 강좌를 수강 할 때 최대 절전 모드 매핑이 필요합니다. 용량 필드에 값을 추가해야합니다.

내 강사 매핑 :

@Entity
@Table(name="LECTURER")
public class Lecturer {

    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="LECTURER_ID_SEQ")
    @SequenceGenerator(name="LECTURER_ID_SEQ", sequenceName="LECTURER_ID_SEQ")
    private Long Id;

    @Column(name="NAME")
    private String name;

    @Column(name="SURNAME")
    private String surname;


    @Column(name="EMAIL")
    private String email;

    @Column(name="USERNAME")
    private String username;

    @Column(name="PASSWORD")
    private String Password;

    @ManyToMany
    @JoinTable(
          name="LECTURER_COURSE",
          joinColumns=@JoinColumn(name="LECTURER_ID"),
          inverseJoinColumns=@JoinColumn(name="COURSE_ID")
      )
    private List<Course> courses;

    //getters - setters
}

내 코스 매핑 :

@Entity
@Table(name="COURSE")
public class Course {

    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="COURSE_ID_SEQ")
    @SequenceGenerator(name="COURSE_ID_SEQ", sequenceName="COURSE_ID_SEQ")
    private Long id;

    @Column(name="NAME")
    private String name;

    @Column(name="CODE")
    private String code;
}

어떤 문제가 내 문제를 해결하는 방법?

해결법

  1. ==============================

    1.이 문제를 해결하려면 @EmbeddedId 및 @Embeddable 주석을 사용해야합니다.

    이 문제를 해결하려면 @EmbeddedId 및 @Embeddable 주석을 사용해야합니다.

    강사 강습 :

    @Entity
    @Table(name="LECTURER")
    public class Lecturer {
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.lecturer", cascade=CascadeType.ALL)
    Set<LecturerCourse> lecturerCourses == new HashSet<LecturerCourse>();
    
    //all others properties Setters and getters are less relevant.
    
    }
    

    코스 종류 :

    @Entity
    @Table(name="COURSE")
    public class Course {
    
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.course", cascade=CascadeType.ALL)
    Set<LecturerCourse> lecturerCourses == new HashSet<LecturerCourse>();
    
    //all others properties Setters and getters are less relevant.
    
    }
    

    강사 종류 :

    @Entity
    @Table(name = "lecturer_course")
    @AssociationOverrides({
            @AssociationOverride(name = "pk.lecturer", 
                joinColumns = @JoinColumn(name = "LECTURER_ID")),
            @AssociationOverride(name = "pk.course", 
                joinColumns = @JoinColumn(name = "COURSE_ID")) })
    public class LecturerCourse {
    
        private LecturerCourseID pk = new LecturerCourseID();
    
        @Column(name = "CAPACITY", nullable = false, length = 10)
        private String capacity;
    
        @EmbeddedId
        public LecturerCourseID getPk() {
            return pk;
        }
    
    }
    

    이제 기본 키 :

    @Embeddable
    public class LecturerCourseID implements java.io.Serializable {
    
        private Lecturer lecturer;
        private Course course;
    
        @ManyToOne
        public Stock getLecturer() {
            return lecturer;
        }
    
        public void setLecturer(Lecturer lecturer) {
            this.lecturer= lecturer;
        }
    
        @ManyToOne
        public Course getCourse() {
            return course;
        }
    
        public void setCourse(Course course) {
            this.course= course;
        }
    
    }
    

    이제 Main은 다음과 같이되어야합니다 :

    Lecturer lecturer1 = new Lecturer();
    Course math = new Course();
    LecturerCourse lecturer1math  = new LecturerCourse();
    lecturer1math.setCapacity("capacity");
    lecturer1math.setLecturer(lecturer1);
    lecturer1math.setCourse(math);
    lecturer1.getLecturerCourses().add(lecturer1math);
    
    //saving object
    session.save(lecturer1);
    

    @Embeddable로 표시된 클래스가 Serializable 마커 인터페이스를 구현해야하는지 확인해야합니다.

    희망이 도움이됩니다.

  2. from https://stackoverflow.com/questions/10294338/how-do-i-create-many-to-many-hibernate-mapping-for-additional-property-from-the by cc-by-sa and MIT license