Это мой родительский класс:
//relevant imports
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Quiz {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true)
private Long id;
private long questionPublished;
private long questionNeverPublished;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "quiz")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Question> questionAnalytics;
}
Дочерний класс:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
public class Question {
private Long questionId;
// the inverse mapped entity was both added and removed and the back mapping didn't work in both cases
@ManyToOne(fetch = FetchType.EAGER)
private QuizAnalytics quizAnalytics;
// till here
@ElementCollection(fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
private List<Long> attemptedLearners;
}
Теперь, если я пытаюсь сохранить викторину объекта со списком вопросов, оба объекта сохраняются , но сопоставление между Вопросом и Викториной не создается. Я ожидаю, что это отображение будет создано автоматически. Если мы вручную добавим сопоставление перед его сохранением, то увидим желаемое поведение.
Однако, если мы теперь удалим тест из объекта Вопрос и повторим тот же процесс, будут созданы таблицы соединения, что является ожидаемым поведение. Однако эти таблицы не заполняются. Даже если мы изменим исходное отображение на:
@OneToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
@JoinColumn(name = question_id_join_column)
private List<QuestionInDepth> questionInDepthAnalytics;
Даже в этом сценарии question_id_join_column не обновляется.
Я использую SpringBoot v2.2.0 и спящий режим по умолчанию, связанный с spring- загрузки пускателя данных JPA