我有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?)])
未保存时未填充ID,两个实体均由AppealTemplate存储库保存,但对于问题字段template_id未填充。
如何在第一次保存时自动填充template_id?