如何决解项目中hibernate中多对多关系中对象转换json死循环
先写一下原因吧!我是写的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());
}
第一次写,写的不好还请谅解。全为自己手写,和思路。
最新文章
- [LeetCode] Unique Substrings in Wraparound String 封装字符串中的独特子字符串
- SQLServer自动备份和自动删除过期文件
- banner秒杀
- [windows]禁止指定用户使用远程桌面服务登录
- redhat mysql 远程开启
- cmake编译时遇到的问题解决
- 程序员的视角:java 线程(转)
- ASP.NET Web API下的HttpController激活:程序集的解析
- TCPDump 抓Loopback数据包
- 网络协议 5 - ICMP 与 ping:投石问路的侦察兵
- EasyPR源码剖析(8):字符分割
- ThinkJS 开发node后端 使用 简介
- 针对负载均衡集群中的session解决方案的总结
- ThinkPHP 小于5.0.24 远程代码执行高危漏洞 修复方案
- 在VS2010中使用Git管理源代码
- Win2008r2 由ESXi 转换到 HyperV的处理过程
- JavaBean的实用工具Lombok(省去get、set等方法)
- poj2018(高精度二分+dp)
- phaser3 微信小游戏若干问题
- UVa 1151 - Buy or Build(最小生成树)