Java JPA - Как бы вы отобразили эти объекты? Отобразить многоконечную сущность во множество - PullRequest
0 голосов
/ 27 апреля 2020

Мое приложение для учителей, чтобы помочь отслеживать учеников в их классах. Это означает, что схема такова:

Учитель может иметь много классных комнат. Классная комната принадлежит одному учителю и имеет много учеников. Студент принадлежит к одному классу и имеет много целей. Цель принадлежит многим студентам и имеет много ориентиров. Ориентир принадлежит одной цели и имеет много испытаний. Испытание относится к одному эталону и является уникальным для студента, даже если это испытание относится к эталону, который относится к цели, которая разделяется многими студентами.

Проблема заключается в том, что цель может быть общей для всех Многие учащиеся, все тесты цели и тесты тестов распределяются между студентами также, но испытания должны быть уникальными для каждого студента. В настоящее время у меня есть таблица отношений между многими учениками и целями. Как бы я мог проводить испытания 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 в целом.

...