Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字节[]设置为null后,该字节未为null_Java_Mysql_Hibernate_Mariadb_Jhipster - Fatal编程技术网

Java 将字节[]设置为null后,该字节未为null

Java 将字节[]设置为null后,该字节未为null,java,mysql,hibernate,mariadb,jhipster,Java,Mysql,Hibernate,Mariadb,Jhipster,我有一个带有Hibernate 5.2.17.Final和带有MariaDB的Java8的项目 我的实体有一个byte[]字段,我在其中将文件保存到数据库中。在我使用该字段将文件发送到S3之后,我想删除其内容(将其设置为null),然后将实体保存到DB,并将该字段设置为null 我需要将该列保留在db中,因为这是一个升级,并且该列有一个NOTNULL值的条目 我所尝试的: //首先: invoiceDTO.setPdf(空); //由于“PDF”的值已经为空,发票也将为空 发票=invoiceF

我有一个带有Hibernate 5.2.17.Final和带有MariaDB的Java8的项目

我的实体有一个
byte[]
字段,我在其中将文件保存到数据库中。在我使用该字段将文件发送到S3之后,我想删除其内容(将其设置为null),然后将实体保存到DB,并将该字段设置为
null

我需要将该列保留在db中,因为这是一个升级,并且该列有一个NOTNULL值的条目

我所尝试的:

//首先:
invoiceDTO.setPdf(空);
//由于“PDF”的值已经为空,发票也将为空
发票=invoiceFaMapper.toEntity(invoiceDTO);
发票=发票发票保存(发票);
调试时,字段为null,但数据库中的值不为null

// then I tried this:
byte[] pdf = null;
invoice.setPdf(pdf);
这也给我留下了一个数据库中的NOTNULL值,同样,当调试
发票时,
有一个NOTNULL值

//我最后尝试的是:
invoice.setPdf(“.getBytes());
同样,它不是空的

我错过了什么

编辑:在
invoice=invoicefarpository.save(发票)之后这是
字节[]
字段的值

如果我正在调试并花费时间,则该字段将设置为null,如果没有断点,则不会设置为null,而是设置为上一个值

我甚至在已经保存它以使其为空后尝试过这个,但没有效果

invoice.setPdf(空);
发票保存。保存(发票);
EDIT2:Invoice.java(相关)

(…)
@高球
@列(name=“pdf”)
私有字节[]pdf;
(...)
公共字节[]getPdf(){
返回pdf;
}
公共发票pdf(字节[]pdf){
this.pdf=pdf;
归还这个;
}
公共void setPdf(字节[]pdf){
this.pdf=pdf;
}

将对象保存到数据库后,我重定向到该对象。由于发票有许多行,我查询que发票及其行

Optional invoiceDTO=invoiceService.findonewithline(id);
在该方法中,我有如下内容:

@覆盖
公共可选Findonewithline(长id){
可选i=invoicefarpository.findById(id);
i、 如果存在(发票->{
if(invoice.getAttachmentUrl()!=null){
invoice.setPdf(amazonService.downloadFile(invoice.getAttachmentUrl()).toByteArray());
}
});
返回i.map(invoiceFaMapper::toDto);
}
问题是,我在括号内所做的任何事情都会存储在DB中,我不知道为什么(我没有调用存储库,所以为什么会保存它?)

我通过编辑
I.ifPresent(invoice->{
行之外的字段解决了这个问题


编辑:
服务
类被注释为
@Transactional
,添加了
@Transactional(readOnly=true)
真的解决了这个问题。

您检查过数据库中是否没有重复数据吗?一个是旧值,一个是空值?如果您的意思是数据库中可能有另一列,那么没有,只有一列包含此值,而不是列,我是指表中的另一条记录。否,我正在创建新条目以检查值是否为n无论是否为ull,所有新条目均不适用于
发票
类别的PLZ粘贴详细代码