如何决解项目中hibernate中多对多关系中对象转换json死循环

时间:2024-01-10 15:08:44

先写一下原因吧!我是写的SSH项目,在项目中我遇到的问题是把分页对象(也就是pageBean对象)转化为json数据,下面为代码:

public class PageBean <T>{
//当前页
private int pageNum;
//页面显示数量
private int pageSize; 
//查询总数(查询数据库所得)
private int totalRecord;
//当前页开始索引
private int startIndex; 
//总页面数
private int totalPage; 
//数据
private List<T> data;

由于我写的是组与成员之间的组那块,组与成员

在hibernate关系是多对多关系,当你想把组成员对象集合转化为jsong格式,那么你应该发现在成员对象中是包含组对象集合的,而组对象是包含成员对象的集合。这就是问题所在,也是异常

freemarker.template.TemplateModelException: Method public java.lang.String org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on net.sf.json.JSONException: There is a cycle in the hierarchy!
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)

因为你想把组对象转为为json对象,那么在转化时必然会去把成员对象转化为json,所以导致死循环。

你要做的事破除该死循环,附上所有代码

PageBean<User> resultUser = userService.findUserByUse(evenFind);//查找所有用户组对象数据并封装到分页对象中
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject = new JSONObject();
if(resultUser != null){

//循环把每个对象取出,生成json对象,不能直接生成json数组对象,否则会报原来的错误,
if(resultUser.getData().size()>0){
for(int i= 0 ;i<resultUser.getData().size();i++){
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setIgnoreDefaultExcludes(true);
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//防止自包含
String [] strArry= {"userGounp"};

//需要去除转化为json对象的属性名称
jsonConfig .setExcludes(strArry);
JSONObject json = JSONObject.fromObject(resultUser.getData().get(i),jsonConfig);

//添加到json对象数组中
jsonArray.add(json);
}
}
jsonObject.put("data",jsonArray);
jsonObject.put("pageSize",resultUser.getPageSize());
jsonObject.put("pageNum", resultUser.getPageNum());
}

第一次写,写的不好还请谅解。全为自己手写,和思路。