Мое приложение для учителей, чтобы помочь отслеживать учеников в их классах. Это означает, что схема такова:
Учитель может иметь много классных комнат. Классная комната принадлежит одному учителю и имеет много учеников. Студент принадлежит к одному классу и имеет много целей. Цель принадлежит многим студентам и имеет много ориентиров. Ориентир принадлежит одной цели и имеет много испытаний. Испытание относится к одному эталону и является уникальным для студента, даже если это испытание относится к эталону, который относится к цели, которая разделяется многими студентами.
Проблема заключается в том, что цель может быть общей для всех Многие учащиеся, все тесты цели и тесты тестов распределяются между студентами также, но испытания должны быть уникальными для каждого студента. В настоящее время у меня есть таблица отношений между многими учениками и целями. Как бы я мог проводить испытания JPA на основе учащегося, которому он принадлежит, а также эталона, к которому он принадлежит? Нужно ли мне создавать еще одну таблицу отношений, чтобы объединить их?
Если у эталона есть какие-то отношения, которые говорят что-то вроде "Эй, пробная версия, я вижу, что вы принадлежите ученику, которому принадлежит и цель, к которой я принадлежу чтобы пойти со мной! ?
Имеет ли это какой-то смысл? Нужно ли реструктурировать какие-либо из моих отношений? Какое отношение было бы наиболее подходящим для использования в этом случае?
@Entity
@Table(name = "trials")
public class Trial {
@Id
@Expose
private String id;
@ManyToOne
@JoinColumn(name="benchmark_id", insertable = false, updatable = false)
private Benchmark benchmark;
@Entity
@Table(name = "benchmarks")
public class Benchmark {
@Id
@Expose
private String id;
@ManyToOne
@JoinColumn(name = "goal_id", insertable = false, updatable = false)
private Goal goal;
@Expose
@OneToMany
@JoinTable(
name = "student_goal",
joinColumns = @JoinColumn(name = "goal_id", referencedColumnName = "goal_id"),
inverseJoinColumns = @JoinColumn(name = "student_id", referencedColumnName = "student_id")
)
private List<Trial> trials;
@Entity
@Table(name = "goals")
public class Goal {
@Id
@Expose
private String id;
@ManyToMany(mappedBy = "goals")
private List<Student> students;
@Expose
@OneToMany(mappedBy = "goal")
private List<Benchmark> benchmarks;
@Entity
@Table(name = "students")
public class Student {
@Id
@Expose
private String id;
@ManyToOne
@JoinColumn(name = "classroom_id", insertable = false, updatable = false)
private Classroom classroom;
@Expose
@ManyToMany
@JoinTable(
name = "student_goal",
joinColumns = @JoinColumn(name = "student_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "goal_id", referencedColumnName = "id")
)
private List<Goal> goals;
Для меня таблица соединений в бенчмарке. java говорит: "возьмите строки в таблице student_goal" у которых совпадает с target_id для моего, а затем возьмите испытания, у которых student_id аналогичен указанному в таблице student_goal. Неужели я не так понимаю? Я новичок в реляционном сопоставлении и новичок в JPA в целом.