Java 休眠代理错误-Gson
我使用hibernate在Java中构建RESTfulWeb服务(CRUD)。 问题是,当我返回某个具有某种关系的表中的数据(GET)时,会出现以下错误: HTTP状态500-内部服务器错误 类型异常报告 消息java.lang.UnsupportedOperationException:试图序列化java.lang.Class:org.hibernate.proxy.HibernateProxy。忘记注册类型适配器 说明服务器遇到意外情况,无法满足请求 删除由hibernate在任意一侧(表)创建的双向映射时,服务器将恢复正常操作。 我使用Gson库以JSON格式返回和接收我的请求。 有人知道怎么解决这个问题吗? 谢谢大家的帮助 以下是我的控制器代码的一部分:Java 休眠代理错误-Gson,java,hibernate,rest,gson,Java,Hibernate,Rest,Gson,我使用hibernate在Java中构建RESTfulWeb服务(CRUD)。 问题是,当我返回某个具有某种关系的表中的数据(GET)时,会出现以下错误: HTTP状态500-内部服务器错误 类型异常报告 消息java.lang.UnsupportedOperationException:试图序列化java.lang.Class:org.hibernate.proxy.HibernateProxy。忘记注册类型适配器 说明服务器遇到意外情况,无法满足请求 删除由hibernate在任意一侧(表)
@GET
@Path("getConvenio")
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public String getConvenioList() {
Gson gson = new Gson();
List<Tbconveniado> l = new ArrayList();
try {
l = new ArrayList(op.getConveniadoList());
} catch (Exception ex) {
ex.printStackTrace();
}
return gson.toJson(l);
}
你能提供一个吗?看看这个答案:,希望能有所帮助。朋友尝试了这个解决方案,但没有成功。我创建了HibernateProxyTypeAdapter类,并在GET方法中执行以下操作:“GsonBuilder b=new GsonBuilder();b.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY);Gson Gson=b.create();List l=new ArrayList();Try{l=new ArrayList(op.getConveniadoList());}Catch(异常示例){Ex.printStackTrace();}Return gson.toJson(l);“你能告诉我可能发生了什么吗?
public class ConvenioOperations {
public void setConvenio(Tbconveniado tb) {
Session s = HibernateUtil.getSessionFactory().openSession();
Transaction tx = s.beginTransaction();
s.saveOrUpdate(tb);
tx.commit();
s.close();
}
public List<Tbconveniado> getConveniadoList(){
Session s = HibernateUtil.getSessionFactory().openSession();
Transaction tx = s.beginTransaction();
List<Tbconveniado> l = null;
Query q = s.createQuery("from Tbconveniado c");
l = q.list();
tx.commit();
s.close();
return l;
}
}
<hibernate-mapping>
<class name="pojos.Tbconveniado" table="tbconveniado" catalog="sindicatodb" optimistic-lock="version" >
<id name="idConveniado" type="int">
<column name="idConveniado" />
<generator class="assigned" />
</id>
<!-- foreign key -->
<many-to-one name="tbramo" class="pojos.Tbramo" fetch="select">
<column name="ramo" not-null="true" />
</many-to-one>
<property name="nome" type="string">
<column name="nome" length="100" />
</property>
<property name="dataConvenio" type="date">
<column name="dataConvenio" length="10" />
</property>
<property name="dataLimite" type="date">
<column name="dataLimite" length="10" />
</property>
<property name="endereco" type="string">
<column name="endereco" length="100" />
</property>
<property name="bairro" type="string">
<column name="bairro" length="100" />
</property>
<property name="cep" type="string">
<column name="cep" length="20" />
</property>
<property name="telefone" type="string">
<column name="telefone" length="20" />
</property>
<property name="cnpj" type="string">
<column name="cnpj" length="15" />
</property>
<property name="cidade" type="string">
<column name="cidade" length="100" />
</property>
<property name="status" type="java.lang.Integer">
<column name="status" />
</property>
<property name="email" type="string">
<column name="email" length="100" />
</property>
</class>
</hibernate-mapping>
public class Tbconveniado implements java.io.Serializable {
private int idConveniado;
private Tbramo tbramo;
private String nome;
private Date dataConvenio;
private Date dataLimite;
private String endereco;
private String bairro;
private String cep;
private String telefone;
private String cnpj;
private String cidade;
private Integer status;
private String email;
public Tbconveniado() {
}
public Tbconveniado(int idConveniado, Tbramo tbramo) {
this.idConveniado = idConveniado;
this.tbramo = tbramo;
}
public Tbconveniado(int idConveniado, Tbramo tbramo, String nome, Date dataConvenio, Date dataLimite, String endereco, String bairro, String cep, String telefone, String cnpj, String cidade, Integer status, String email) {
this.idConveniado = idConveniado;
this.tbramo = tbramo;
this.nome = nome;
this.dataConvenio = dataConvenio;
this.dataLimite = dataLimite;
this.endereco = endereco;
this.bairro = bairro;
this.cep = cep;
this.telefone = telefone;
this.cnpj = cnpj;
this.cidade = cidade;
this.status = status;
this.email = email;
}
public int getIdConveniado() {
return this.idConveniado;
}
public void setIdConveniado(int idConveniado) {
this.idConveniado = idConveniado;
}
public Tbramo getTbramo() {
return this.tbramo;
}
public void setTbramo(Tbramo tbramo) {
this.tbramo = tbramo;
}
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Date getDataConvenio() {
return this.dataConvenio;
}
public void setDataConvenio(Date dataConvenio) {
this.dataConvenio = dataConvenio;
}
public Date getDataLimite() {
return this.dataLimite;
}
public void setDataLimite(Date dataLimite) {
this.dataLimite = dataLimite;
}
public String getEndereco() {
return this.endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getBairro() {
return this.bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCep() {
return this.cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public String getTelefone() {
return this.telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getCnpj() {
return this.cnpj;
}
public void setCnpj(String cnpj) {
this.cnpj = cnpj;
}
public String getCidade() {
return this.cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public Integer getStatus() {
return this.status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
}