【问题标题】:could not deserialize] with root cause java.io.EOFException: null无法反序列化] 根本原因 java.io.EOFException: null
【发布时间】:2017-11-14 11:24:59
【问题描述】:

我已经看到了一些关于这个主题的问题,但我的案例没有任何有效的解决方案

我遇到了 jason 序列化异常我有以下类

当我执行 GET Pacientes 时,我遇到了序列化特权类型的异常

2017-11-14 08:54:35.039  INFO 8724 --- [nio-8080-exec-1] o.h.e.internal.DefaultLoadEventListener  : HHH000327: Error performing load command : org.hibernate.type.SerializationException: could not deserialize
2017-11-14 08:54:35.047 ERROR 8724 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize] with root cause

    java.io.EOFException: null
        at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) ~[na:1.8.0_144]
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) ~[na:1.8.0_144]
        at java.io.ObjectInputStream.readStreamHeader(Unknown Source) ~[na:1.8.0_144]
        at java.io.ObjectInputStream.<init>(Unknown Source) ~[na:1.8.0_144]
        at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:309) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:299) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:218) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]

我正在使用带有 spring data jpa 的框架 Spring boot

类Paciente

import java.io.Serializable;
import java.math.BigInteger;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import digifred.model.global.Entidades;
import digifred.model.global.IdentidadesGenero;
import digifred.model.global.OrientacoesSexuais;
import digifred.model.global.Pessoas;


@Entity
@Table(name = "pacientes", schema = "sau")
public class Pacientes implements Serializable  {



    private static final long serialVersionUID = 5776384003601026304L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idPaciente")
    private Long idPaciente;


    @JoinColumn(name="id_entidade")
    @ManyToOne(cascade = CascadeType.ALL)
    private Entidades entidade;


    @Basic(optional = false)
    @JoinColumn(name="idPessoa")
    @ManyToOne(cascade = CascadeType.ALL)
    private Pessoas pessoa;


    @Column(name = "idResponsavel_familiar")
    private BigInteger responsavelFamiliar;


    @Column(name = "nomeResponsavel")
    private String nomeResponsavel;


    @Column(name = "cpfResponsavel")
    private String cpfResponsavel;


    @Column(name = "cnsResponsavel")
    private String cnsResponsavel;


    @Column(name = "flagAlergico")
    private Integer flagAlergico;


    @Column(name = "observacoesAlergias")
    private String observacoesAlergias;


    @Column(name = "microarea")
    private String microarea;


    @Column(name = "idDomicilio")
    private Long idDomicilio;


    @JoinColumn(name="idOrientacaoSexual")
    @ManyToOne
    private OrientacoesSexuais orientacaoSexual;


    @JoinColumn(name="idIdentidadeGenero", insertable=false, updatable=false)
    @ManyToOne
    private IdentidadesGenero identidadeGenero;


    @Basic(optional = false)
    @Column(name = "flag_ativo")
    private int flagAtivo;


    @JoinColumn(name="idArea")
    @ManyToOne
    private Areas area;


    @JoinColumn(name="idFamilia")
    @ManyToOne
    private Familias familia;

    public Pacientes() {
    }


 getters and setters
}

【问题讨论】:

    标签: java spring hibernate jpa serialization


    【解决方案1】:

    看起来您正在尝试反序列化一个空流。

    【讨论】:

    • @EduardoKrakhecke 你做了什么来解决这个问题?我也面临同样的问题。
    【解决方案2】:

    您不能简单地通过 REST 接口传输数据库实体,您必须创建 DTO 并传输它们而不是您的实体。

    【讨论】:

    • 好吧,你是对的,但你需要确保你可以反序列化和序列化你的实体,在这种情况下,你并不确定。我认为使用单独的 DTO 会容易得多,而且您在 REST 接口上可能有不同的对象结构而不是实体
    【解决方案3】:

    对我来说,原因是在关联上使用 @Column 而不是 @JoinColumn。能够通过打开正在运行的查询的日志来找出答案:

    spring.jpa.show-sql=true
    spring.jpa.properties.hibernate.format_sql=true
    logging.level.org.springframework.transaction=DEBUG
    logging.level.org.hibernate=DEBUG
    logging.level.org.hibernate.SQL=debug
    logging.level.org.hibernate.type.descriptor.sql=trace
    

    tbh,不确定实际上需要哪些属性,但我在其他一些 SO 问题上找到了它们,并在调试时将它们全部打开。在日志中,我看到每个提取的列都有一行,在我得到的异常之前记录的最后一个是我有错误注释的关联的列值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2016-12-09
      • 2016-11-28
      相关资源
      最近更新 更多