首页 > 解决方案 > 尽管 Postgres 有一个有效的 ID,但 GenerationType.IDENTITY 的 ID 为空

问题描述

我在 SO 上阅读了几篇类似的帖子,但到目前为止没有任何帮助。我正在使用 Java EE 8、Open Liberty 20.0.0.6 和 PostgreSQL 12。

我使用 Docker 在本地运行,它使用以下方式初始化架构:

CREATE TABLE IF NOT EXISTS PUBLIC.tab_todo
(
    col_id     SERIAL PRIMARY KEY,
    col_name   VARCHAR(80) NOT NULL,
    col_desc   VARCHAR(500),
    col_due    TIMESTAMP NOT NULL,
    col_state  BOOLEAN NOT NULL
);

addTodo保留新元素的方法非常简单:

public Long addTodo(final Todo todo) {
    LOG.info("Add todo");
    entityManager.persist(todo);
    LOG.info("Created todo: {}", todo);
    return todo.getId();
}

但 id 始终是null.

这是我的实体:

@Entity
@Table(name = "tab_todo")
public class Todo implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    //@Column(name = "col_id", nullable = false) // This did not have any effect either
    private Long id;

    @Column(name = "col_name")
    private String name;

    @Column(name = "col_desc")
    private String description;

    @Column(name = "col_state")
    private boolean status;

    @Column(name = "col_due")
    private LocalDateTime dueDate;

    // Getter, Setter, etc.

保存一个新的工作正常。当我检查数据库时,我可以看到col_id已正确设置。但是 JPA 在持久化时不会在我的实体中设置 id。

我在这里做错了什么?

标签: javapostgresqljpaeclipselinkjava-ee-8

解决方案


推荐阅读