не могу сохранить изображение в postgresql. столбец «данные» имеет тип bytea, но выражение имеет тип bigint

У меня есть Spring-Boot-Starter-Parent v3.1.2 с спящим режимом v6.2.6. Я пытаюсь сохранить byte[] в postgresql и получаю следующую ошибку

      column "data" is of type bytea but expression is of type bigint
Hint: You will need to rewrite or cast the expression.

Я нашел такое решение для спящего режима v5@Type(type = "org.hibernate.type.ImageType")и@Type(type = "org.hibernate.type.BinaryType")но ничего для v6

Есть идеи?

      @Entity
@Getter
@Setter
@Table(name = "image")
@ToString(exclude = {"data"})
public class ImageEntity {

    @Id
    private UUID id;

    @Column(name = "file_name")
    private String fileName;

    @Column(name = "content_type")
    private String contentType;

    @Lob
    private byte [] data;
}

      @SpringBootApplication
@EnableJpaRepositories(basePackages = "com.example.image")
public class DemoApplication implements ApplicationRunner {

    @Autowired
    private ImageRepository imageRepository;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        ImageEntity imageEntity = new ImageEntity();
        imageEntity.setId(UUID.randomUUID());
        imageEntity.setFileName("image.jpg");
        imageEntity.setContentType("image/jpeg");
        imageEntity.setData(Files.readAllBytes(Paths.get("image.jpg")));

        imageRepository.save(imageEntity);
    }
}
      CREATE TABLE public.image (
    id uuid NOT NULL,
    file_name varchar(255) NULL,
    content_type varchar(255) NULL,
    "data" bytea NULL,
    CONSTRAINT image_pk PRIMARY KEY (id)
);

1 ответ

на случай, если вы еще не нашли ответ в stackoverflow. Это хорошо объясняет: невозможно использовать Spring Data JPA для извлечения пользователей, у которых есть байт [] изображения профиля.

Вкратце: вы используете bytea типа postgres, Hibernate (6.2) использует аннотацию, чтобы попытаться использовать механизм OID postgres. Если вы удалите@Lobон использует правильное сопоставление. Я думаю, вам также стоит добавить:

      @Column(name = "data", columnDefinition="bytea")

в ваше поле данных.

С уважением, Кнут

Другие вопросы по тегам