org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy....

-------------------------------------------jackson的异常-------------------------------------------------

使用JSON,Spring-MVC,Hibernate

我有Students(学生类)和Classes(班级类)

@Entity
@Table(name="wangbo_students")
public class Students implements Serializable {


private static final long serialVersionUID = 1L;

private String stuId;//学生ID
private String stuName;//学生姓名
private String sex;//学生性别
private Integer age;//学生年龄
private Classes classes;//所在班级





@GenericGenerator(name = "generator", strategy = "uuid")
@Id
@GeneratedValue(generator = "generator")
@Column(name = "stuid", unique = true, nullable = false, length = 32)
public String getStuId() {
return stuId;
}
public void setStuId(String stuId) {
this.stuId = stuId;
}

@Column(name="stuname")
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}

@Column(name="sex")
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}

@Column(name="age")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="classid")
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes) {
this.classes = classes;
}


}


@Entity
@Table(name="wangbo_classes")
public class Classes {

private String classId;//班级Id
private String gradeName;//年级名字
private String className;//班级名字
private Integer classCount;//班级人数


@GenericGenerator(name = "generator", strategy = "uuid")
@Id
@GeneratedValue(generator = "generator")
@Column(name = "classid", unique = true, nullable = false, length = 32)
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}

@Column(name="gradename")
public String getGradeName() {
return gradeName;
}
public void setGradeName(String gradeName) {
this.gradeName = gradeName;
}

@Column(name="classname")
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}

@Column(name="classcount")
public int getClassCount() {
return classCount;
}
public void setClassCount(int classCount) {
this.classCount = classCount;
}




}

我在做删除操作时,出现如下异常

org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer (and no bean properties discovered to create bean serializer)
at org.codehaus.jackson.map.ser.StdSerializerProvider$1.serialize(StdSerializerProvider.java:53)
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:91)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:52)
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:91)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:52)
at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:225)
at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:206)
at org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:341)
at com.anthony.icsolutions.util.common.JsonPluginsUtil.beanToJackson(JsonPluginsUtil.java:542)
at com.anthony.icsolutions.admin.teacher.StudentAction.delete(StudentAction.java:166)
at com.anthony.icsolutions.admin.teacher.StudentAction$$FastClassByCGLIB$$58514336.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
at com.anthony.icsolutions.admin.teacher.StudentAction$$EnhancerByCGLIB$$ad1992e.delete(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)

.....

-------------------------------------------异常分析-------------------------------------------------

因为学生类属性中有班级属性,多对一单方面关系,而且是延时加载,做删除时,JSON得不到班级属性值,所以它会报异常

------------------------------------------解决方法-------------------------------------------------

1.加上注解@JsonIgnore,即不管这个属性

        @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="classid")
@JsonIgnore
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes) {
this.classes = classes;
}

2.将延时加载改为立即加载

        @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="classid")
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes) {
this.classes = classes;
}

------------------------------------------参开资料-------------------------------------------------

1.点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值