byte[] 设置为 null 后未为 null

我有一个 Hibernate 5.2.17.Final 和 Java 8 和 MariaDB 的项目。


我的实体有一个byte[]字段,我将文件保存到数据库中。在我使用该字段将文件发送到 S3 后,我想删除其内容(将其设置为 null),然后将该字段设置为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());

同样,它不是空的。


我错过了什么?


长风秋雁
浏览 90回答 1
1回答

qq_笑_17

将对象保存到数据库后,我重定向到该对象。由于发票有很多行,我查询 que invoice 及其行Optional<InvoiceDTO> invoiceDTO = invoiceService.findOneWithLines(id);在那个方法里面我有这样的东西:&nbsp; &nbsp; @Override&nbsp; &nbsp; public Optional<InvoiceFaDTO> findOneWithLines(long id) {&nbsp; &nbsp; &nbsp; &nbsp; Optional<Invoice> i = invoiceFaRepository.findById(id);&nbsp; &nbsp; &nbsp; &nbsp; i.ifPresent(invoice -> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (invoice.getAttachmentUrl() != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; invoice.setPdf(amazonService.downloadFile(invoice.getAttachmentUrl()).toByteArray());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; return i.map(invoiceFaMapper::toDto);&nbsp; &nbsp; }问题是我在括号内所做的任何事情都会存储在数据库中,我不知道为什么(我没有调用存储库,那为什么会保存呢?)。我通过编辑i.ifPresent(invoice -> {行外的字段解决了这个问题。编辑:Service该类被注释@Transactional,添加@Transactional(readOnly = true)确实解决了问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java