У меня есть проект с Hibernate 5.2.17.Final и Java 8 с MariaDB.
У моего объекта есть поле byte[]
, в котором я сохраняю файл в БД.После того, как я использовал это поле для отправки файла на S3, я хочу удалить его содержимое (установив его на ноль), а затем сохранить объект в БД с этим полем, установленным на null
.
Мне нужно сохранить этот столбец в БД, поскольку это обновление, и для этого столбца есть записи с ненулевым значением.
Что я пробовал:
// first this:
invoiceDTO.setPdf(null);
// as the value of "PDF" is already null, invoice will have it also null
Invoice invoice = invoiceFaMapper.toEntity(invoiceDTO);
invoice = invoiceFaRepository.save(invoice);
При отладке поле было нулевым, но значение в БД не равно нулю.
// then I tried this:
byte[] pdf = null;
invoice.setPdf(pdf);
, что также оставило мне ненулевое значение в БД, опять же, при отладкеinvoice
имел ненулевое значение.
// last thing I tried was:
invoice.setPdf("".getBytes());
Опять же, он не был нулевым.
Чего мне не хватает?
РЕДАКТИРОВАТЬ: после invoice = invoiceFaRepository.save(invoice);
это значение для поля byte[]
.
Если я отлаживаю и беру время, поле устанавливается равным нулю, еслинет точки разрыва, она не будет установлена на ноль, но на предыдущее значение.
Я даже пробовал это после того, как уже сохранил его, чтобы сделать его нулевым, но безрезультатно.
invoice.setPdf(null);
invoiceFaRepository.save(invoice);
EDIT2: Invoice.java (актуально)
(...)
@Lob
@Column(name = "pdf")
private byte[] pdf;
(...)
public byte[] getPdf() {
return pdf;
}
public Invoice pdf(byte[] pdf) {
this.pdf = pdf;
return this;
}
public void setPdf(byte[] pdf) {
this.pdf = pdf;
}