Весенняя загрузка PostgreSQL: org.postgresql.util.PSQLException: ОШИБКА: нулевое значение в столбце «id» нарушает ограничение not-null

#postgresql #spring-boot #hibernate #jpa

#postgresql #весенняя загрузка #спящий режим #jpa

Вопрос:

Я не понимаю, почему вдруг я не могу сохранить новый объект в моей табличной структуре.

Моя сущность:

 @Entity
@Data
@EqualsAndHashCode(exclude="frameworkSortingType")
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "framework")
public class Framework {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @JsonManagedReference
    @OneToOne(mappedBy = "framework", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private FrameworkSortingType frameworkSortingType;
 

ОШИБКА:

 Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "id" violates not-null constraint
  Detail: Failing row contains (null, 1, 1, 1, null, 2020-11-23 01:14:43.472, null, 2020-11-23 01:14:43.472, 1, 783772).
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2183)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:308)
    at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441)
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365)
    at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:143)
    at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:120)
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
 

В чем проблема? ID должно быть установлено значение NULL, чтобы сохранить новый объект в таблице! Когда я хочу обновить какую-то строку, тогда ID столбец не может быть нулевым… Но я не могу понять, почему вдруг я не могу добавить новую строку в свою таблицу Framework . Недавно я добавил только @EqualsAndHashCode(exclude="frameworkSortingType") потому, что иногда у меня была циклическая зависимость от FrameworkSortingType таблицы. Но я не думаю, что это изменение является причиной моей проблемы…

Я хотел бы добавить, что на удаленном сервере разработчика это работает, фреймворк — старая таблица… ошибка возникает локально на моем компьютере…

Ответ №1:

Вы пометили поле id с помощью @Id, что означает, что теперь id является ПЕРВИЧНЫМ ключом, поэтому он не будет нулевым.

 GenerationType.AUTO
 

Тип генерации.AUTO указывает, что поставщик сохраняемости должен выбрать подходящую стратегию на основе указанного диалекта базы данных. АВТО автоматически установит сгенерированные значения. Это тип генерации по умолчанию. Если стратегия не определена, по умолчанию она будет считаться АВТОМАТИЧЕСКОЙ. Все базы данных поддерживают эту стратегию.

Здесь я вижу, что вы пытаетесь сохранить, когда id = null, что вы не можете сделать. Поэтому не присваивайте никакого значения полю id. Spring-boot позаботится обо всем.