не могу сохранить изображение в 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")
в ваше поле данных.
С уважением, Кнут