微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Spring JPA 中保存具有 @ManyToOne 关系的实体

如何解决在 Spring JPA 中保存具有 @ManyToOne 关系的实体

我有一个实体 Request

@Entity
public class Request {

    @Id
    @GeneratedValue
    private Long id;

    private Long candidate;

    @ManyToOne
    private ExamSchedule examSchedule;

...

另外,ExamSchedule :

@Entity
public class ExamSchedule {

    @Id
    @GeneratedValue
    private Long id;

    @NonNull
    private Instant start;

    @NonNull
    private Instant end;

...

现在,将 RequestExamSchedule 一起保存:

  1. 我将检查是否存在针对给定请求的考试时间表。
  2. 如果是,则通过与现有的 Request 关联来存储新的 ExamSchedule
  3. 如果不是,则通过与新创建的 Request 关联来存储新的 ExamSchedule

在上面的第二种情况下,它将新创建的 ExamScheduleRequest 相关联。在这里,预计不应创建 ExamSchedule 的新实例并使用现有实例。

请让我知道这里可能缺少什么。 谢谢。


Optional<ExamSchedule> scheduleOptional = examScheduleRepository
                .findByStartAndEnd(schedule.getStart(),schedule.getEnd());

        ExamSchedule examSchedule = scheduleOptional
                .orElse(examScheduleRepository.save(schedule));

        Request request = new Request(scribe.getId(),candidate.getId(),examSchedule);
        return requestRepository.save(request);

解决方法

那是一个愚蠢的错误。 orElse of optional 执行其参数,而不管 optional 是否为空。 我需要使用 orElseGet。这提供了 Supplier 作为输入,仅在 optional 为空时才执行。

ExamSchedule examSchedule = scheduleOptional.orElseGet(() -> examScheduleRepository.save(schedule));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。