前言:

  在一次项目中,分页查询公告列表信息后,在遍历查询到的公告列表时出现了死循环“There is a cycle in the hierarchy”错误,分析原因是因为在公告实体类中包含了商铺对象导致,所以在遍历的时候需要过滤掉商铺这个字段。

代码示例:

公告实体类

/**
*
* 电商-公告
* EshopNotice entity.*/
@Entity
@Table(name = "eshop_notice")
@JsonIgnoreProperties(value={"shop"})
public class EshopNotice implements java.io.Serializable { // Fields // 系统ID
private String sysid; //时间戳记
private String tstamp; // 操作日期
private String operationDateTime; // 操作员
private String operator; /**
* 商铺
*/
private CoreCompany shop; /**
* 标题
*/
private String title; /**
* 内容
*/
private String content; /**
* 发布日期
*/
private String publishDatetime; /**
* 状态
*/
private String status; // Constructors
/** default constructor */
public EshopNotice() {
}
/** minimal constructor */
public EshopNotice(String tstamp, String operationDateTime, String operator, String title, String content,
String publishDatetime, String status) {
this.tstamp = tstamp;
this.operationDateTime = operationDateTime;
this.operator = operator;
this.title = title;
this.content = content;
this.publishDatetime = publishDatetime;
this.status = status;
} /** full constructor */
public EshopNotice(String tstamp, String operationDateTime, String operator, CoreCompany shop, String title,
String content, String publishDatetime, String status) {
this.tstamp = tstamp;
this.operationDateTime = operationDateTime;
this.operator = operator;
this.shop = shop;
this.title = title;
this.content = content;
this.publishDatetime = publishDatetime;
this.status = status;
} // Property accessors
@GenericGenerator(name = "generator", strategy = "uuid.hex")
@Id
@GeneratedValue(generator = "generator")
@Column(name = "sysid", unique = true, nullable = false, length = 32)
public String getSysid() {
return sysid;
}
public void setSysid(String sysid) {
this.sysid = sysid;
}
@Column(name = "tstamp", nullable = false, length = 20)
public String getTstamp() {
return tstamp;
}
public void setTstamp(String tstamp) {
this.tstamp = tstamp;
}
@Column(name = "operationdatetime", nullable = false, length = 20)
public String getOperationDateTime() {
return operationDateTime;
}
public void setOperationDateTime(String operationDateTime) {
this.operationDateTime = operationDateTime;
}
@Column(name = "operator", nullable = false, length = 32)
public String getOperator() {
return this.operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shop", nullable = false)
public CoreCompany getShop() {
return this.shop;
}
public void setShop(CoreCompany shop) {
this.shop = shop;
}
@Column(name = "title", nullable = false, length = 128)
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
@Column(name = "content", nullable = false, length = 2000)
public String getContent() {
return this.content;
}
public void setContent(String content) {
this.content = content;
}
@Column(name = "publishdatetime", nullable = false, length = 20)
public String getPublishDatetime() {
return publishDatetime;
}
public void setPublishDatetime(String publishDatetime) {
this.publishDatetime = publishDatetime;
}
@Column(name = "status", nullable = false, length = 32)
public String getStatus() {
return this.status;
}
public void setStatus(String status) {
this.status = status;
}

分页查询遍历

@RequestMapping("/listPage.html")
public JSONTableDateView noticeList(HttpServletRequest request,PageQuery pageQuery) { CoreMember member=(CoreMember)request.getSession().getAttribute("member");
CoreCompany company=coreCompanyService.getByMemberId(member.getSysid()); //分页查询
PageResults<EshopNotice> pageResults = noticeService.noticeList(pageQuery,company.getSysid());
//设置页面参数
JSONArray data = new JSONArray();
for(EshopNotice eshopNotice : pageResults.getResults()){
JsonConfig jsonConfig=new JsonConfig();
jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
@Override
public boolean apply(Object arg0, String arg1, Object arg2) {
//过滤段公告中的shop字段,否则会无限死循环
if (arg1.equals("shop") ) {
return true;
} else {
return false;
}
}
});
JSONObject dataTemp =JSONObject.fromObject(eshopNotice,jsonConfig);
dataTemp.put("title", eshopNotice.getTitle());
dataTemp.put("content", eshopNotice.getContent());
if(eshopNotice.getStatus().equals("00")){
dataTemp.put("status","申请");
}else{
dataTemp.put("status","审核通过");
}
dataTemp.put("publishDatetime",eshopNotice.getPublishDatetime());
dataTemp.put("sysid", eshopNotice.getSysid());
data.add(dataTemp);
}
JSONTableDateView jSONTableDateView = new JSONTableDateView(pageQuery, pageResults, data);
return jSONTableDateView;
}

There is a cycle in the hierarchy解决的更多相关文章

  1. 使用JSONObject.fromObject的时候出现“There is a cycle in the hierarchy”异常 的解决办法

    在使用JSONObject.fromObject的时候,出现“There is a cycle in the hierarchy”异常.   意思是出现了死循环,也就是Model之间有循环包含关系: ...

  2. atitit.解决net.sf.json.JSONException There is a cycle in the hierarchy

    atitit.解决net.sf.json.JSONException There is a cycle in the hierarchy 1. 环境:使用hibernate4跟个,,要不个哪的对象系列 ...

  3. hibernate:There is a cycle in the hierarchy! 造成死循环解决办法

    下面是报的异常:在网上搜了关于:There is a cycle in the hierarchy!,才知道原来是因为死循环造成的!解决了好久,没有成功,后台不得已请教老大,老大说是因为在使用JSON ...

  4. json:There is a cycle in the hierarchy!

    在使用JSONObject.fromObject的时候,出现“There is a cycle in the hierarchy”异常. 意思是出现了死循环,也就是Model之间有循环包含关系: 解决 ...

  5. net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案

    net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案 今天在用List集合转换成json数组的时候发生了这个错误,这个 ...

  6. net.sf.json.JSONException: There is a cycle in the hierarchy!

    因为项目中使用了AJAX技术,jar包为:json-lib.jar,在开发过程中遇到了一个JSON-LIB和Hibernate有关的问题: 如hibernate延迟加载错误,这都是些老问题了,一看就知 ...

  7. There is a cycle in the hierarchy! role对象此时是什么错误

    There is a cycle in the hierarchy! role对象此时是什么错误

  8. net.sf.json.JSONException: There is a cycle in the hierarchy!的解决办法

    使用Hibernate manytoone属性关联主表的时候,如果使用JSONArray把pojo对象转换成json对象时,很容易出现循环的异常.解决的办法就是, 在转换json对象时忽略manyto ...

  9. JSON解析关联类型发生死循环 There is a cycle in the hierarchy!

    解决办法是忽略掉关联类型的数据,使用jsonConfig进行配置,代码如下: JsonConfig jsonConfig = new JsonConfig();  //建立配置文件 jsonConfi ...

随机推荐

  1. JDBC之批量处理

    JDBC之批量处理 一.批量处理JDBC语句提高处理速度 当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率 ...

  2. Python机器学习笔记:不得不了解的机器学习知识点(2)

    之前一篇笔记: Python机器学习笔记:不得不了解的机器学习知识点(1) 1,什么样的资料集不适合用深度学习? 数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势. 数据集没有局 ...

  3. 多线程编程学习六(Java 中的阻塞队列).

    介绍 阻塞队列(BlockingQueue)是指当队列满时,队列会阻塞插入元素的线程,直到队列不满:当队列空时,队列会阻塞获得元素的线程,直到队列变非空.阻塞队列就是生产者用来存放元素.消费者用来获取 ...

  4. TypeScript进阶开发——ThreeJs基础实例,从入坑到入门

    前言 我们前面使用的是自己编写的ts,以及自己手动引入的jquery,由于第三方库采用的是直接引入js,没有d.ts声明文件,开发起来很累,所以一般情况下我们使用npm引入第三方的库,本文记录使用np ...

  5. [2018CCPC吉林赛区(重现赛)- 感谢北华大学] 补题记录 躁起来

    1007 High Priestess 埃及分数 1008 Lovers 线段树维护取膜意义下的区间s和. 每个区间保存前缀lazy和后缀lazy. #include <iostream> ...

  6. CodeForces 590C Three States BFS

    Three Statesy 题解: 以3个大陆为起点,都dfs一遍,求出该大陆到其他点的最小距离是多少, 然后枚举每个点作为3个大陆的路径交点. 代码: #include<bits/stdc++ ...

  7. codeforces 873 D. Merge Sort(分治)

    题目链接:http://codeforces.com/contest/873/problem/D 题解:这题挺简单的,除了一开始算作是调用到一次,然后每次执行操作时都会调用2次,所以最多调用几次就很好 ...

  8. codeforces 459 E. Pashmak and Graph(dp)

    题目链接:http://codeforces.com/contest/459/problem/E 题意:给出m条边n个点每条边都有权值问如果两边能够相连的条件是边权值是严格递增的话,最长能接几条边. ...

  9. 在CMD命令行进入和退出Python程序

    进入: 直接输入python即可 退出: 方法一:输入exit(),回车 方法二:输入quit(),回车 方法三:CTRL + Z,回车

  10. C++数据类型(data type)介绍

    在编写程序时,数据类型(data type)定义了使用存储空间的(内存)的方式. 程序员通过定义数据类型(data type),告诉特定存储空间这里要存储的数据类型是什么,以及你即将操作他的方式.(注 ...