Столбец JSONB не обновлен до значения NULL - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть классовое c многослойное приложение REST Spring Boot, подключенное к базе данных PostgreSQL. В этом приложении одна из конечных точек должна установить для некоторых полей значения NULL на одном из моих объектов.

@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class Assessment extends AbstractEntity {
    ...

    @ManyToOne
    @JoinColumn(name = "disputer_id")
    private User disputer;

    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    @Basic(fetch = FetchType.LAZY)
    private Form dispute;
    ...
    private String disputeFeedback;
    ...
}

По некоторым причинам, в некоторых случаях поле спора (типа JSONB, использующее com.vladmihalcea.hibernate.type. json .JsonBinaryType) не установлено в NULL.

Я пробовал следующие комбинации настроек:

1. 
- application: Spring Boot on my local machine
- database: setup using Docker on my local machine
- result: all 3 fields from above set to NULL
2. 
- application: on my local machine
- database: PostgreSQL in a Kubernetes container (test environment)
- result: all 3 fields from above set to NULL
3. 
- application: Spring Boot in a Kubernetes container (test environment)
- database: PostgreSQL in a Kubernetes container (test environment)
- result: all fields except the JSONB field set to NULL.

Я включил журналы SQL и заметил, что по какой-то причине по при третьей установке столбец jsonb вообще не включается в скрипт обновления:

Hibernate: 
    update
        assessment 
    set
        ...
        dispute_feedback=?,
        disputer_id=?,
        ...
        time_of_last_status_change=?
    where
        id=?
...
2020-02-26 12:48:59.553 TRACE 1 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [4] as [VARCHAR] - [null]
2020-02-26 12:48:59.553 TRACE 1 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [5] as [OTHER] - [null]
...
2020-02-26 12:48:59.554 TRACE 1 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [14] as [TIMESTAMP] - [2020-02-26T12:48:59.500787Z]

Имеют ли столбцы JSONB в сочетании с Hibernate какие-то ограничения, когда речь заходит об их обновлении? Хотя ранее я работал с ними и не сталкивался с такими проблемами.

Спасибо


Обновление 1: Я попытался добавить аннотацию @DynamicUpdate в моя сущность и теперь столбец также имеют значение NULL в тестовой среде, но это все еще заставляет меня задуматься, почему этот столбец не был включен в первую версию сценария обновления.

...