• There is a cycle in the hierarchy解决


    前言:

      在一次项目中,分页查询公告列表信息后,在遍历查询到的公告列表时出现了死循环“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;
        }        
        
  • 相关阅读:
    ECMAScript 引用类型Object 对象
    jQuery Form Plugin
    在 PHP5 中使用 DOM 控制 XML
    JavaScript encodeURI()和encodeURIComponent() 函数
    程序员进阶的建议:多看、多写、多交流
    jQuery 取 css zindex 值在各种浏览器中的返回值
    XPath 语法教程(Tutorial_2)
    使用 strpos 需要注意 === 运算符
    关于代码开发规范和原则
    PHP 编写大型网站问题集
  • 原文地址:https://www.cnblogs.com/guzhou-ing/p/7201612.html
Copyright © 2020-2023  润新知