请教个hibernate级联映射转json的问题
班级publicclassClasses{privateStringid;privateStringclassName;privateSet<Student>classS...
班级
public class Classes{
private String id;
private String className;
private Set<Student> classStudents = new HashSet<Student>(0);
}
//学生
public class Student{
private String id;
private String snumber;
private String sname;
private Classes classes;
}
映射文件
<set name="classStudents" inverse="false">
<key>
<column name="classId" not-null="true" />
</key>
<one-to-many class="edu.hbuas.jx.bean.Student" />
</set>
和
<many-to-one name="classes" class="edu.hbuas.jx.bean.Classes" fetch="select">
<column name="classId" not-null="true" />
</many-to-one>
现在我想把所有的学生输出到前台,用json,同时显示学生所在的班级
这中间就存在json在两个类循环溢出的问题
json-lib可以设置过滤,我知道
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
String[] excludes = {"classes"};//-->设置属性的排除列表,也就是说指出不需要序列化的属性
jsonConfig.setExcludes(excludes);
但是过滤"classes"就得不到所在班级的名称了
我只想把classes的 set集合给过滤掉,避免循环
求大神帮忙~~~高分悬赏 展开
public class Classes{
private String id;
private String className;
private Set<Student> classStudents = new HashSet<Student>(0);
}
//学生
public class Student{
private String id;
private String snumber;
private String sname;
private Classes classes;
}
映射文件
<set name="classStudents" inverse="false">
<key>
<column name="classId" not-null="true" />
</key>
<one-to-many class="edu.hbuas.jx.bean.Student" />
</set>
和
<many-to-one name="classes" class="edu.hbuas.jx.bean.Classes" fetch="select">
<column name="classId" not-null="true" />
</many-to-one>
现在我想把所有的学生输出到前台,用json,同时显示学生所在的班级
这中间就存在json在两个类循环溢出的问题
json-lib可以设置过滤,我知道
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
String[] excludes = {"classes"};//-->设置属性的排除列表,也就是说指出不需要序列化的属性
jsonConfig.setExcludes(excludes);
但是过滤"classes"就得不到所在班级的名称了
我只想把classes的 set集合给过滤掉,避免循环
求大神帮忙~~~高分悬赏 展开
2个回答
展开全部
你这个问题我曾经遇到过,把我困我两天。
把一个存放多个实体list放入json中,因为存入的实体用hibernate与其它 实体之间的关联关系,所以会报一个死循环的错。用你这种方式,确实不会报错,但其实在客户端就取不到过滤的值了。
我最后用的是这种方式
JsonConfig config = new JsonConfig();
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
config.setExcludes(new String[]{"handler","hibernateLazyInitializer"});
你试着加上最后一句代码试试,我是这样做的。不会报错,也能取到值,而不会过滤。
把一个存放多个实体list放入json中,因为存入的实体用hibernate与其它 实体之间的关联关系,所以会报一个死循环的错。用你这种方式,确实不会报错,但其实在客户端就取不到过滤的值了。
我最后用的是这种方式
JsonConfig config = new JsonConfig();
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
config.setExcludes(new String[]{"handler","hibernateLazyInitializer"});
你试着加上最后一句代码试试,我是这样做的。不会报错,也能取到值,而不会过滤。
展开全部
既然你用了JsonConfig 为什么不适用属性过滤器呢,config.setPropertyFilter(new PropertyFilter(){
public boolean apply(Object source, String name, Object value) {
}
})
public boolean apply(Object source, String name, Object value) {
}
})
更多追问追答
追问
jsonConfig.setPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
if (value != null && Set.class.isAssignableFrom(value.getClass())) {
return true;
}
return false;
}
});
这样我试过了,不行啊
追答
你这肯定不行啊,等于null的情况也需要过滤吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询