Consider 4 classes:
User
@Entity
@Table(name = "users")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private long id;
@Column(name = "name")
private String name;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
@Column(name = "created_at")
@Temporal(TemporalType.DATE)
private LocalDate createdAt;
@Column(name = "locked")
private boolean locked;
@Column(name = "enabled")
private boolean enabled;
@ManyToMany
@JoinTable(
name = "users_course",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses;
@ManyToMany
@JoinTable(
name = "users_lesson",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "lesson_id")
)
private List<Lesson> lessons;
@ManyToMany
@JoinTable(
name = "users_exercise",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "exercise_id")
)
private List<Exercise> exercises;
Course
@Entity
@Table(name = "course")
public class Course{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
@JsonManagedReference
@OneToMany(mappedBy = "course",
cascade = CascadeType.ALL,
fetch = FetchType.LAZY)
private List<Lesson> lessons;
}
Lesson
@Entity
@Table(name = "lesson")
public class Lesson {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "course_id")
private Course course;
@Column(name = "name")
private String name;
@JsonManagedReference
@OneToMany(mappedBy = "lesson", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Exercise> exercises;
}
Exercise
@Entity
@Table(name = "exercise")
public class Exercise {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "lesson_id")
@JsonBackReference
private Lesson lesson;
@Column(name = "exercise")
private String exercise;
@Transient
private boolean access;
@Transient
private double typingSpeed;
@Transient
private double mistakeCount;
}
I want to fill access, mistakeCount and typingSpeed fields. When I'm getting all exercises for the user these fields have default value. How can I fill them? Is there way to get values from users_exercises table and put them to these field?
I saw that some people created class like UserExercise (exemple of my case), but I'm not sure that it is right