Erro de serialização no Hibernate

1 resposta
antoniopopete

Tenho o seguinte mapeamento

package br.com.indados.madeirada.model.pojos;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@Table(name="PERIODO",schema="MADEIRADA")
public class Periodo implements Serializable{

	@Id
	@Column(name="ID")
	@SequenceGenerator(name = "SQ_PERIODO",sequenceName = "SQ_PERIODO")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SQ_PERIODO")
	private Long id;

	@Column(name="DESCRICAO",length=100,nullable=false)
	private String descricao;

	@Column(name="DT_INICIAL",nullable=false)
	@Temporal(TemporalType.DATE)
	private Date dataInicial;

	@Column(name="DT_FINAL",nullable=false)
	@Temporal(TemporalType.DATE)
	private Date dataFinal;


	@Transient
	private Date maxDataFinal;

	@Column(name="DT_INI_RESGATE")
	@Temporal(TemporalType.DATE)
	private Date dataInicialResgate;

	@Column(name="DT_FIM_RESGATE")
	@Temporal(TemporalType.DATE)
	private Date dataFinalResgate;

	@Column(name="SITUACAO",length=1)
	private Situacao situacao;

	@OneToMany(mappedBy="pk.periodo",fetch=FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection<Resgate> resgates;

	@OneToMany(mappedBy="periodo",fetch=FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection<Importacao> importacoes;

	public Periodo() {

	}

	public Date getDataFinal() {

		return dataFinal;
	}

	public void setDataFinal(Date dataFinal) {

		this.dataFinal = dataFinal;
	}

	public Date getDataFinalResgate() {

		return dataFinalResgate;
	}

	public void setDataFinalResgate(Date dataFinalResgate) {

		this.dataFinalResgate = dataFinalResgate;
	}

	public Date getDataInicial() {

		return dataInicial;
	}

	public void setDataInicial(Date dataInicial) {

		this.dataInicial = dataInicial;
	}

	public Date getDataInicialResgate() {

		return dataInicialResgate;
	}

	public void setDataInicialResgate(Date dataInicialResgate) {

		this.dataInicialResgate = dataInicialResgate;
	}

	public String getDescricao() {

		return descricao;
	}

	public void setDescricao(String descricao) {

		this.descricao = descricao;
	}

	public Long getId() {

		return id;
	}

	public void setId(Long id) {

		this.id = id;
	}

	public Situacao getSituacao() {
		return situacao;
	}

	public void setSituacao(Situacao situacao) {
		this.situacao = situacao;
	}

	public Date getMaxDataFinal() {
		return maxDataFinal;
	}

	public void setMaxDataFinal(Date maxDataFinal) {
		this.maxDataFinal = maxDataFinal;
	}

	public Collection<Importacao> getImportacoes() {
		return importacoes;
	}

	public void setImportacoes(Collection<Importacao> importacoes) {
		this.importacoes = importacoes;
	}

	public Collection<Resgate> getResgates() {
		return resgates;
	}

	public void setResgates(Collection<Resgate> resgates) {
		this.resgates = resgates;
	}



}

***************888
package br.com.indados.madeirada.model.pojos;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import br.com.indados.madeirada.model.pojos.pk.ResgatePK;

@Entity
@Table(name="RESGATE",schema="MADEIRADA")
public class Resgate  implements Serializable{

	@EmbeddedId
	private ResgatePK pk;

	@Column(name="PONT_UNITARIA",nullable=false)
	private Long pontuacaoUnitaria;

	@Column(name="PONTUACAO",nullable=false)
	private Long pontuacao;

	@Column(name="QUANTIDADE",nullable=false)
	private Integer quantidade;

	@Column(name="DATA",nullable=false)
	@Temporal(TemporalType.DATE)
	private Date data;

	@Transient
	private Date dataInicial;

	@Transient
	private Date dataFinal;

	@Column(name="MATR_PARTICPNT",nullable=false,length=10)
	private String matriculaParticipante;
	//private Participante participante;

	/*
	private Periodo periodo;

	private Premio premio;
	*/

	public ResgatePK getPk() {
		return pk;
	}

	public void setPk(ResgatePK pk) {
		this.pk = pk;
	}

	public Resgate() {

	}

	/*
	public Participante getParticipante() {

		return participante;
	}

	public void setParticipante(Participante participante) {

		this.participante = participante;
	}
	*/

	public Date getData() {

		return data;
	}

	public void setData(Date data) {

		this.data = data;
	}

	public Long getPontuacao() {

		return pontuacao;
	}

	public void setPontuacao(Long pontuacao) {

		this.pontuacao = pontuacao;
	}

	public Long getPontuacaoUnitaria() {

		return pontuacaoUnitaria;
	}

	public void setPontuacaoUnitaria(Long pontuacaoUnitaria) {

		this.pontuacaoUnitaria = pontuacaoUnitaria;
	}

	public Integer getQuantidade() {

		return quantidade;
	}

	public void setQuantidade(Integer quantidade) {

		this.quantidade = quantidade;
	}

	public Date getDataFinal() {

		return dataFinal;
	}

	public void setDataFinal(Date dataFinal) {

		this.dataFinal = dataFinal;
	}

	public Date getDataInicial() {

		return dataInicial;
	}

	public void setDataInicial(Date dataInicial) {

		this.dataInicial = dataInicial;
	}

	public String getMatriculaParticipante() {
		return matriculaParticipante;
	}

	public void setMatriculaParticipante(String matriculaParticipante) {
		this.matriculaParticipante = matriculaParticipante;
	}

	/*
	public Premio getPremio() {

		return premio;
	}

	public void setPremio(Premio premio) {

		this.premio = premio;
	}

	public Periodo getPeriodo() {

		return periodo;
	}

	public void setPeriodo(Periodo periodo) {

		this.periodo = periodo;
	}
	*/
}


*********************************************

package br.com.indados.madeirada.model.pojos;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="IMPORTACAO",schema="MADEIRADA")
public class Importacao implements Serializable{

	@Id
	@Column(name="ID")
	@SequenceGenerator(name = "SQ_IMPORTACAO",sequenceName = "SQ_IMPORTACAO")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SQ_IMPORTACAO")
	private Long id;

	@Column(name="DATA",nullable=false)
	@Temporal(TemporalType.DATE)
	private Date data;

	@Column(name="USUARIO",nullable=false,length=20)
	private String usuario;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="ID_PERIODO")
	private Periodo periodo;

	//private Situacao situacao;
	@Column(name="SITUACAO",length=1)
	private String situacao;

	@OneToMany(mappedBy="importacao",fetch=FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private Collection<Venda> vendas;

	public Importacao() {

	}

	public Date getData() {

		return data;
	}

	public void setData(Date data) {

		this.data = data;
	}

	public Long getId() {

		return id;
	}

	public void setId(Long id) {

		this.id = id;
	}

	public Periodo getPeriodo() {

		return periodo;
	}

	public void setPeriodo(Periodo periodo) {

		this.periodo = periodo;
	}

	public String getUsuario() {

		return usuario;
	}

	public void setUsuario(String usuario) {

		this.usuario = usuario;
	}

	public String getSituacao() {

		return situacao;
	}

	public void setSituacao(String situacao) {

		this.situacao = situacao;
	}
	/*
	public Situacao getSituacao() {

		return situacao;
	}

	public void setSituacao(Situacao situacao) {

		this.situacao = situacao;
	}
	*/

	public Collection<Venda> getVendas() {

		return vendas;
	}

	public void setVendas(Collection<Venda> vendas) {

		this.vendas = vendas;
	}

}

E quando executo um save ou load ou get no meu HibernateUtil ele lança a seguinte exceção:

org.hibernate.type.SerializationException: could not deserialize
	at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:217)
	at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:240)
	at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:82)
	at org.hibernate.type.SerializableType.get(SerializableType.java:39)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)
	at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
	at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2096)
	at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1380)
	at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1308)
	at org.hibernate.loader.Loader.getRow(Loader.java:1206)
	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
	at org.hibernate.loader.Loader.doQuery(Loader.java:701)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3044)
	at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395)
	at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
	at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
	at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
	at br.com.indados.madeirada.util.HibernateUtil.main(HibernateUtil.java:37)
Caused by: java.io.EOFException
	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2232)
	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2698)
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:750)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:268)
	at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:252)
	at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:209)
	... 26 more

Alguem saberia dizer qual o problema??
Porque ja atualizei as libs, coloquei a versão mais nova da lib cp(algum nome) e continua dando o mesmo erro.

1 Resposta

antoniopopete

Eu resolvi isso mudando o @temporal(temporalTypes.timestamp)
ao inves de date, porque no banco ele estava definido como timestamp.

Criado 31 de julho de 2007
Ultima resposta 31 de jul. de 2007
Respostas 1
Participantes 1