[SPRING] Join 테이블의 추가 속성을 위해 많은 수의 최대 절전 모드 매핑을 만드는 방법은 무엇입니까?
SPRINGJoin 테이블의 추가 속성을 위해 많은 수의 최대 절전 모드 매핑을 만드는 방법은 무엇입니까?
나는 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.이 문제를 해결하려면 @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 마커 인터페이스를 구현해야하는지 확인해야합니다.
희망이 도움이됩니다.
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
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 3.1이있는 Jackson 2.0 (0) | 2018.12.10 |
---|---|
[SPRING] @ComponentScan의 특정 패키지 필터링 (0) | 2018.12.10 |
[SPRING] 봄 보안 사용자 정의 필터를 작성하는 방법? (0) | 2018.12.10 |
[SPRING] Spring에서 런타임시 빈을 동적으로 선언한다. (0) | 2018.12.10 |
[SPRING] 봄 3 mvc, 올바른 구문을 사용하여 양식지지 개체로 <Foo> 목록? (0) | 2018.12.10 |