Olá, esse é meu primeiro post aqui, desculpe se o titulo ficou um pouco confuso.
Para melhorar vou explicar melhor do que se trata meu projeto:
Ele é dividido em 3 partes:
Um cliente android
Um servidor que fornece os objetos salvos em banco para o cliente android(hibernate+MySql)
Um projeto Web em JSF que acessa o mesmo banco (hibernate+MySql)
O android e o servidor se cominicam via socket, a comunicação é sempre feita por um objeto chamado Pacote (código abaixo), que tem "cabecalho" e "conteudo"(o que realmente é enviado)
O objeto requerido é posto no atributo "conteudo" da classe "Pacote" com um "cabecalho" para identificá-lo
O problema está na hora do android converter os objetos de dentro do atributo "conteudo" para sua tipagem de origem.
Quando eu mando os objetos sem recuperá-los do banco com o hibernate, tudo funciona certinho. Porem na hora de enviar os mesmos objetos, mas vindos do banco, eu tenho problemas com as dependências do hibernate.
Cheguei a adicionar ao android os jar do hibernate para ver se resolvia o problema, porem gerou outro:
11-07 22:01:17.555: W/System.err(322): java.io.InvalidClassException: org.hibernate.collection.PersistentBag; Incompatible class (SUID): org.hibernate.collection.PersistentBag: static final long serialVersionUID =2819117614876030537L; but expected org.hibernate.collection.PersistentBag: static final long serialVersionUID =-6715929845403737778L;(Servidor)o metodo de envio
private void BuscaListaSabor() {
List<Sabor> listaSabor = new ArrayList<Sabor>();
SaborHandler saborHandler = new SaborHandler();
listaSabor = saborHandler.getListaSabor();
Sabor teste = listaSabor.get(0);
System.out.println("enviando: "+teste);
pacoteEnviado = new Pacote(Constantes.SOCKET_DELIVERY_SABOR_LIST, teste);
}
Log.i("SOCKET", "Lendo resposta...");
pacoteRecebido = (Pacote) in.readObject();
Sabor teste = (Sabor) pacoteRecebido.getConteudo(); //aqui da erro!
Log.i("SOCKET", teste.getNome());
package socket.entidade;
import java.io.Serializable;
public class Pacote implements Serializable{
private static final long serialVersionUID = 1L;
private final int cabecalho;
private final Object conteudo;
public Pacote(int cabecalho, Object conteudo) {
super();
this.cabecalho = cabecalho;
this.conteudo = conteudo;
}
public int getCabecalho() {
return cabecalho;
}
public Object getConteudo() {
return conteudo;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package modelo.entidade;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author renanmarcel
*/
@Entity
@Table(name = "sabor")
public class Sabor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id_sabor")
private Integer idSabor;
@Column(name = "nome")
private String nome;
@ManyToMany(mappedBy = "saborList")
private List<Pizza> pizzaList;
public Sabor() {
}
public Sabor(Integer idSabor) {
this.idSabor = idSabor;
}
public Integer getIdSabor() {
return idSabor;
}
public void setIdSabor(Integer idSabor) {
this.idSabor = idSabor;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@XmlTransient
public List<Pizza> getPizzaList() {
return pizzaList;
}
public void setPizzaList(List<Pizza> pizzaList) {
this.pizzaList = pizzaList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (idSabor != null ? idSabor.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Sabor)) {
return false;
}
Sabor other = (Sabor) object;
if ((this.idSabor == null && other.idSabor != null) || (this.idSabor != null && !this.idSabor.equals(other.idSabor))) {
return false;
}
return true;
}
@Override
public String toString() {
return "modelo.entidade.Sabor[ idSabor=" + idSabor + " ]";
}
}
Obrigado pela ajuda!