Mam pytanie do zaprojektowania ManyToMany w EJB, w jaki sposób łącznik ma właściwość?
Oto przykład, studenci i kursy są ManyToMany, każdy uczeń ma wiele kursów, a wielu studentów wybiera jeden kurs.JPA ManyToMany, w jaki sposób JoinTable może mieć właściwość?
@Entity
public class Student implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String name;
private Collection<Course> courses;
@ManyToMany(mappedBy = "students",cascade=CascadeType.ALL)
public Collection<Course> getCourses() {
return this.courses;
}
public void setCourses(Collection<Course> courses) {
this.courses = courses;
}
}
@Entity
public class Course implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String name;
private Collection<Student> students;
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "Student_Course",
joinColumns = {@JoinColumn(name = "Course_ID", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName = "id")})
public Collection<Student> getStudents() {
return this.students;
}
public void setStudents(Collection<Student> students) {
this.students = students;
}
}
Jednak jeśli mam właściwość w tabeli JoinTable, na przykład każdy uczeń ma jeden wynik na jeden kurs. Jak mogę zrobić to w EJB z ManyToMany?
Wielkie dzięki za uwagę!
Jeśli relacja mieć własności, to należy modelować go jako całość. To pytanie jest prawie identyczne: http://stackoverflow.com/questions/7602386/mapping-value-in-junction-table-to-entity/7603036#7603036 Nawet nazwa podmiotu reprezentującego relację (CourseAssignment) pasuje całkiem dobrze do twojego walizka. –
Nie jest to możliwe, nie można dodać właściwości do relacji. Jeśli chcesz uzyskać dostęp do właściwości w tabeli łączenia, to ta własność należy do jakiejś jednostki iw rezultacie potrzebujesz trzeciej jednostki. –
Przepraszam, poprawiłem to. Mam tylko inne pytanie, kiedy użyłem klasy @Embeddable jako PK dla jointable, to nie działa (kompilacja się nie udała), ktoś powiedział, że JPA2.0 tego nie wspiera! proszę spojrzeć na to [jpa-eclipselink-manytomany-with-dat] (http://stackoverflow.com/questions/4013397/jpa-eclipselink-manytomany-z-data), czy jest jakiś sposób, żeby to zadziałało? – seaguest