java - 尝试在数据库中保存新实体,但生成的 ID 为空

标签 java spring hibernate jpa h2

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

我的数据库有很多事件。但每个事件的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();
        }
    }

但我无法将此详细信息对象存储在数据库中。 在调试器中我可以看到数据和事件的id为空。所以不可能存储它。但我不知道为什么它是空的。因为我的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();
    }

感谢您的回答。

最佳答案

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

关于java - 尝试在数据库中保存新实体,但生成的 ID 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666547/

相关文章:

java - 如何将此 glob 转换为具有附加约束的正则表达式(使用 Java 7)?

java - 当 ActionBar 搜索 View 打开时禁用按钮并在关闭时启用它

spring - 使用Spring jar-tasklet时设置HADOOP_CLASSPATH

java - 阻止 Hibernate 更新现有记录

java - 使用一个 DTO 对象处理 2 次转换

java - 我正在尝试创建一个 Queue 类,但不断收到似乎与泛型有关的错误。为什么我会收到此错误?

java - jOOQ - 多重绑定(bind)

mysql - Spring JpaRepository findBy...In(Collection) 返回并集而不是交集

java - 如何使用 Spring MVC 中的 @PathVariable 发送 Map<String, String>

java - 如何使用 CriteriaQuery 查询使用 @Convert 注释持久化为字符串的集合?