使用Hibernate来查找数据的时候,会因为延迟加载的问题,导致读取到的实体类不是一个完整的实体,如配置了多对一或多对多的映射的时候,对应的一方不会随之加载,而是在用到的时候去加载,这就导致用Gson转化实体类的时候,无法获取其属性,出现错误:
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter? at com.google.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:67)
解决方法如下:
使用Gson的GsonBuilder构造方法,并利用注解忽略不需要的属性。
如:
<span style="font-size:18px;">@Expose
private int id;
private List books;</span>
这样Gson在转换的时候就会将books属性忽略掉,只输出id属性。
<span style="font-size:18px;">GsonBuilder builder = new GsonBuilder();
builder.excludeFiledWithoutExponseAnnotation();
Gson gson = builder.create();
String result = gson.toJson(object);</span>
但是还有一个问题没有弄清楚,就是如果确实需要关联对象的时候,这种方法就不能使用了,需要一个代理类的转换方法,暂时还不会,以后再写。
在使用Hibernate查询数据时,由于延迟加载机制,多对一或多对多关系的实体属性可能未加载完全。当使用Gson转换实体时,这会导致属性丢失并引发错误。为解决此问题,可以利用GsonBuilder结合注解忽略未加载的属性,例如忽略'books'属性,仅保留'id'属性进行转换。
7

被折叠的 条评论
为什么被折叠?



