如何解决在 Spring JPA 中保存具有 @ManyToOne 关系的实体
@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;
...
现在,将 Request
与 ExamSchedule
一起保存:
- 我将检查是否存在针对给定请求的考试时间表。
- 如果是,则通过与现有的
Request
关联来存储新的ExamSchedule
- 如果不是,则通过与新创建的
Request
关联来存储新的ExamSchedule
在上面的第二种情况下,它将新创建的 ExamSchedule
与 Request
相关联。在这里,预计不应创建 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 举报,一经查实,本站将立刻删除。