我收到一个名为“net.sf.json.JSONException的JSON异常:层次结构中有一个循环!”
这是代码
Query q = em.createQuery("SELECT e from employee e ");
List<Employee> employeeList = q.getResultList();
JSONObject response = new JSONObject();
response.put("empList", employeeList);
这是员工实体。它有一对多的关系
public class Employee {
@Id
private String userId;
@JoinColumn(name = "T_MENTORS_userId", referencedColumnName = "userId")
private Collection<Experience> experience;
}
答案 0 :(得分:2)
您可能正在使用循环引用。 Experience
引用Employee
而Employee
引用Experience
吗?
如果是这样,有几个解决方案:
Employee
Experience
引用
Employee
对象,其属性Experience
不会对其进行循环引用
Employee
。它将为序列化做好准备。您的
目前的课程保持不变。请参阅Martin Fowler,了解DTO的概述:
答案 1 :(得分:1)
在这种情况下,根据您的业务逻辑,您可以删除其中一个引用,例如:
Employee{
private Collection<Experience> experiences;
}
和经验
Experience
{
// no reference to Employee
}
答案 2 :(得分:0)
如果您不想从实体中删除引用,则有一种解决方法。 使用,
JSONObject response = new JSONObject();
response.getJsonConfig().
setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT)
response.put("empList", employeeList);