如何自动填写相关实体ID?

时间:2019-06-04 13:37:25

标签: java hibernate jpa

我有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?

0 个答案:

没有答案