您的位置:首页 > 移动开发

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

2015-05-14 16:54 781 查看
-------------------------------------------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;//班级
4000
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.点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐