Правильное преобразование потока данных BYTEA в Spring+Postgres+Docker
у меня был прошлый топик на эту тему, благополучно решённый.
Сейчас новая проблема. Я работаю с файлами - делаю простой crud для них в БД. Вот часть моей сущности в spring data jpa, которая преобразует входящих поток данных в bytea и сохраняет в базу.
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class)
@ToString(exclude = { "data" })
public class FileEntity implements BaseEntity, Authorable, Available {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String filename;
private String filetype;
// @Lob
@Column(columnDefinition = "BYTEA")
private byte[] data;
@ManyToOne(fetch = FetchType.EAGER)
@JsonProperty("author")
@JoinColumn(name = "author_id")
private User author;
@JsonProperty(value = "public_file_entity", defaultValue = "false")
private Boolean publicEntity = false;
Проблема в том, что при работе локально с Postgres 16.3 я использую обе аннотации
@Lob
@Column(columnDefinition = "BYTEA")
и все корректно работает, создаются колонки с типом bytea. При деплое и запуске через docker-compose такая система не работает, но если я убираю аннотацию @Lob - все срабатывает. Однако уже локально , имея только аннотацию @Column(columnDefinition = "BYTEA")
я получаю ошибку
2024-07-26T17:05:41.815+03:00 WARN 1776481 --- [DocumentAccounting2] [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42804
2024-07-26T17:05:41.815+03:00 ERROR 1776481 --- [DocumentAccounting2] [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : ОШИБКА: столбец "data" имеет тип oid, а выражение - bytea
Подсказка: Перепишите выражение или преобразуйте его тип.
Позиция: 102
2024-07-26T17:05:41.817+03:00 DEBUG 1776481 --- [DocumentAccounting2] [nio-8080-exec-4] o.s.orm.jpa.JpaTransactionManager : Initiating transaction rollback
И столбец в БД становиться типа oid
Подскажи пожалуйста,
- как найти универсальное решение и для локали и для докера?
- в чем именно проблема, почему хибер ведёт себя так в этой ситуации? Поделитесь знаниями, пожалуйста