我有一个对象“事件”和一个对象eventDetails。两者都是jpa实体。
Event对象通过@OneToOne批注包含eventDetails。
我的数据库有很多事件。但是每个事件的eventdetails为空。
在我的RestController中,我尝试像这样填充eventdetails:
@RequestMapping(value = "/event/{eventId}/confirm", method = RequestMethod.PUT)
public ResponseEntity<Void> confirmEvent(
@PathVariable("eventId") long eventId,
@RequestBody(required = true) @Valid EventDetails data) {
EventEntity event = eventRepository.findOne(eventId);
if (event == null || event.getStatus().equals(EventStatus.BLOCKED)) {
return ResponseEntity.badRequest().build();
} else {
event.setStatus(EventStatus.BLOCKED);
EventDetails eventDetails = new EventDetails();
eventDetails.setSalutation(data.getSalutation());
//... all details here
event.setDetails(eventDetails);
eventRepository.save(event);
return ResponseEntity.ok().build();
}
}
但是我无法将此详细信息对象存储在数据库中。
在调试器中,我可以看到data和event的ID为null。因此无法存储它。但我不知道为什么它为空。因为我的EventDetails-Entity具有以下Getter。
@Override
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EVENT_DETAILS_SEQ_PK")
@SequenceGenerator(name = "EVENT_DETAILS_SEQ_PK")
public Long getId() {
return super.getId();
}
感谢您的回答。
最佳答案
从代码片段看来,您只保存了该事件,在这种情况下,必须至少对EventEntity
和EventDetails
(@OneToOne(cascade = CascadeType.PERSIST)
)之间的关系保持级联类型。