#java #jpa #spring-data-jpa
#java #jpa #spring-data-jpa
Вопрос:
У меня есть сущность 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;
...
Теперь, чтобы сохранить Request
вместе с ExamSchedule
:
- Я буду проверять, присутствует ли расписание экзаменов для данного запроса.
- Если да, сохраните новые
Request
, связав с существующимиExamSchedule
- Если нет, сохраните new
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);
Ответ №1:
Это была глупая ошибка. orElse
of optional выполняет свой параметр независимо от того, является ли optional пустым или нет. Мне нужно было использовать orElseGet
. Это обеспечивает Supplier
в качестве входных данных, которые выполняются только тогда, когда необязательный параметр пуст.
ExamSchedule examSchedule = scheduleOptional.orElseGet(() -> examScheduleRepository.save(schedule));