У меня есть 2 сущности, связанные с @ OneToMany.
@Entity
@Table(name = "appeal_templates")
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class AppealTemplate extends AbstractEntity {
private List<Question> questions = new ArrayList<>();
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "template")
public List<Question> getQuestions() {
return questions;
}
}
И второй:
@Setter
@Entity
@Table(name = "appeal_template_questions")
public class Question extends AbstractEntity {
private AppealTemplate template;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "template_id")
public AppealTemplate getTemplate() {
return template;
}
}
AbstractEntity:
@MappedSuperclass
@Setter
@EqualsAndHashCode
@ToString
public abstract class AbstractEntity implements Serializable {
private static final int START_SEQ = 1000;
private Long id;
private LocalDateTime created;
private LocalDateTime updated;
@Id
@SequenceGenerator(name = "global_seq", sequenceName = "global_seq", allocationSize = 1, initialValue = START_SEQ)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "global_seq")
public Long getId() {
return id;
}
@Column(name = "created", updatable = false)
public LocalDateTime getCreated() {
return created;
}
@Column(name = "updated", insertable = false)
public LocalDateTime getUpdated() {
return updated;
}
@PrePersist
public void beforeCreate() {
if (Objects.isNull(created)) {
created = LocalDateTime.now();
}
}
@PreUpdate
public void beforeUpdate() {
if (Objects.isNull(updated)) {
updated = LocalDateTime.now();
}
}
}
Я посылаю dto, чтобы сохранить как это:
AppealTemplate(id=null, questions=[Question(id=null, initial=false, rank=null, text=Quo vadis?)])
Идентификатор не заполнен, пока они не сохранены, обе сущности сохраняются в хранилище AppealTemplate, но для поля «Вопрос» template_id не заполнен.
Как сделать так, чтобы template_id автоматически заполнялся при первом сохранении?