尝试在数据库中保存新的Entitiy但生成的ID为null

时间:2015-06-05 12:26:01

标签: java spring hibernate jpa h2

我有一个对象“Event”和一个对象eventDetails。两者都是jpa实体。 Event对象包含@OneToOne批注的eventDetails。

我的数据库有很多活动。但是每个事件的事件细节都是空的。

在我的RestController中,我尝试填充像这样的事件详细信息:

@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();
        }
    }

但我无法将此详细信息对象存储在数据库中。 在debuger中我可以看到数据和事件的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();
    }

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

在代码片段中,您似乎只保存了事件,在这种情况下,您必须至少在EventEntityEventDetails@OneToOne(cascade = CascadeType.PERSIST)之间的关系上保持级联类型。