сохранение данных типа jsonb с помощью базы данных postgres и весенней загрузки получение исключения JpaSystemException после миграции с java 8 на java 11

#postgresql #spring-boot #hibernate #jsonb

Вопрос:

Я пытаюсь сохранить данные типа jsonb в таблицу базы данных Postgres, используя следующую библиотеку

    <dependency>
            <groupId>com.vladmihalcea</groupId>
            <artifactId>hibernate-types-52</artifactId>
            <version>2.11.1</version>
   </dependency>
   <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.14</version>
   </dependency>
 

В java 8 это работало без каких-либо проблем, но из-за требований мне пришлось перенести службу на java 11, но после переноса, когда я попытался сохранить jsonb в таблице, я получил следующую ошибку.

org.springframework.orm.jpa.JpaSystemException Исключение: java.lang.Исключение IllegalArgumentException: Данный массив байтов не может быть преобразован в объект Json; вложенным исключением является org.hibernate.Исключение HibernateException: java.lang.Исключение IllegalArgumentException: Данный массив байтов не может быть преобразован в объект Json.

ПРИМЕЧАНИЕ — Версии гибернации одинаковы как в java 8, так и в версии java 11: 5.4.20.Окончательные в обеих

Ниже приведена сущность, которая пытается сохранить

 @Builder(toBuilder = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "test")
@TypeDefs({
        @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class),
})
public class Test extends Auditable {

    @Id
    @Column(name = "id", updatable = false, nullable = false, unique = true)
    private UUID id;

    @Type(type = "jsonb")
    @Column(name = "data", columnDefinition = "jsonb")
    private RequestEventDto data;

}
 

ниже приведен запрос на

 import lombok.Builder;
import lombok.Data;

import java.util.List;
import java.util.Map;

@Data
@Builder
public class RequestEventDto {
    private String requestId;

    @Builder.Default
    private String applicationId = "program1";

    private String entityType;
    private List<Map<String, Object>> listEntities;
}
 

Можете ли вы помочь с этой проблемой?

Комментарии:

1. Не могли бы вы тоже показать RequestEventDto , пожалуйста.

2. Привет, @SternK, я обновил его в вопросе. Спасибо

3. Должна быть другая причина исключения, которая расскажет вам больше о реальной проблеме. Прикрепите полную трассировку стека.

Ответ №1:

Исправлена проблема с добавлением следующих аннотаций к запросу

 @NoArgsConstructor
@AllArgsConstructor
public class RequestEventDto {

 

Похоже, это связано с тем, что конструктора не было при сериализации.