Java spring jpa@PreUpdate调用PreUpdate时丢失文件

Java spring jpa@PreUpdate调用PreUpdate时丢失文件,java,spring,spring-data-jpa,entitylisteners,Java,Spring,Spring Data Jpa,Entitylisteners,我有一个包含文件的片段实体(是一个字节数组),当我更新片段的记录时,最后一个片段丢失了她的文件: @Entity @EntityListeners({ PieceListener.class }) public class Piece extends AbstractAuditingEntity { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long idPiece; @Trans

我有一个包含文件的片段实体(是一个字节数组),当我更新片段的记录时,最后一个片段丢失了她的文件:

@Entity
@EntityListeners({ PieceListener.class })
public class Piece extends AbstractAuditingEntity {
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long idPiece;
    @Transient
    @NotNull
    private byte[] file;

    public byte[] getFile() {
        return file;
    }

    public void setFile(byte[] file) {
        this.file = file;
    }
}
侦听器(PieceListener)是:

y件控制器为:

@RestController
@RequestMapping("/api")
public class PieceResource {
    private final Logger log = LoggerFactory.getLogger(PieceResource.class);

    @PostMapping("/pieces")
    @Timed
    public ResponseEntity<Piece> createPiece(@Valid @RequestBody Piece piece) throws URISyntaxException {
        log.debug("REST request to save Piece : {}", piece);
        if (piece.getId() != null) {
            throw new BadRequestAlertException("A new piece cannot already have an ID", ENTITY_NAME, "idexists");
        }
        Piece result = pieceRepository.save(piece);
        return ResponseEntity.created(new URI("/api/pieces/" + result.getId()))
                .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())).body(result);
    }

    @PutMapping("/pieces")
    @Timed
    public ResponseEntity<Piece> updatePiece(@Valid @RequestBody Piece piece) throws URISyntaxException {
        log.debug("piece file is " + (piece.getFile() != null));
        log.debug("REST request to update Piece : {}", piece);
        if (piece.getId() == null) {
            return createPiece(piece);
        }
        log.debug("piece content file is " + (piece.getFile() != null));
        log.debug("piece file is " + piece.getFile());
        Piece result = pieceRepository.save(piece);
        return ResponseEntity.ok().headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, piece.getId().toString()))
                .body(result);
    }
}
@RestController
@请求映射(“/api”)
公共类工件资源{
私有最终记录器log=LoggerFactory.getLogger(PieceResource.class);
@邮戳(“/件”)
@定时
public ResponseEntity createPiece(@Valid@RequestBody-Piece)抛出URISyntaxException{
debug(“保存片段的REST请求:{}”,片段);
if(piece.getId()!=null){
抛出新的BadRequestAlertException(“一个新的片段不能已经有一个ID”,实体名称,“idexists”);
}
工件结果=工件库。保存(工件);
return ResponseEntity.created(新URI(“/api/pieces/”+result.getId()))
.headers(HeaderUtil.createEntityCreationErt(实体名称,result.getId().toString()).body(结果);
}
@PutMapping(“/件”)
@定时
public ResponseEntity updatePiece(@Valid@RequestBody Piece)引发URISyntaxException{
log.debug(“工件文件为”+(工件.getFile()!=null));
debug(“更新工件的REST请求:{}”,工件);
if(piece.getId()==null){
返回创建件(件);
}
log.debug(“工件内容文件为”+(工件.getFile()!=null));
log.debug(“工件文件是”+piece.getFile());
工件结果=工件库。保存(工件);
返回ResponseEntity.ok().headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME,piece.getId().toString())
.机构(结果);
}
}
在我的控制台里 件号 但是,即使文件不是空的,片段内容文件false


我的问题是为什么文件是空的,我如何解决这个问题?

由于字段
文件
没有持久化,那么当您从数据库检索对象时,它将把该字段设置为空。但是你不引用你使用的代码,在什么时候这是空的……但是当我尝试添加一个新的片段时:@PrePersist public void changepagenameandcontenttype(片段){log.debug(“片段内容文件”+(片段.getFile()!=null));}我得到片段内容文件TRUE了吗?
@RestController
@RequestMapping("/api")
public class PieceResource {
    private final Logger log = LoggerFactory.getLogger(PieceResource.class);

    @PostMapping("/pieces")
    @Timed
    public ResponseEntity<Piece> createPiece(@Valid @RequestBody Piece piece) throws URISyntaxException {
        log.debug("REST request to save Piece : {}", piece);
        if (piece.getId() != null) {
            throw new BadRequestAlertException("A new piece cannot already have an ID", ENTITY_NAME, "idexists");
        }
        Piece result = pieceRepository.save(piece);
        return ResponseEntity.created(new URI("/api/pieces/" + result.getId()))
                .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString())).body(result);
    }

    @PutMapping("/pieces")
    @Timed
    public ResponseEntity<Piece> updatePiece(@Valid @RequestBody Piece piece) throws URISyntaxException {
        log.debug("piece file is " + (piece.getFile() != null));
        log.debug("REST request to update Piece : {}", piece);
        if (piece.getId() == null) {
            return createPiece(piece);
        }
        log.debug("piece content file is " + (piece.getFile() != null));
        log.debug("piece file is " + piece.getFile());
        Piece result = pieceRepository.save(piece);
        return ResponseEntity.ok().headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, piece.getId().toString()))
                .body(result);
    }
}