2013-06-30 14 views
2

我得到一個JSON例外稱爲‘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); 

這裏是Employee實體有一對多的關係

public class Employee { 
@Id 
private String userId; 
    @JoinColumn(name = "T_MENTORS_userId", referencedColumnName = "userId") 
private Collection<Experience> experience; 
} 
+1

你明白這個問題嗎?你想對此做什麼? – SLaks

回答

1

在這種情況下,根據你的業務邏輯,你可以刪除的參考之一,例如:

Employee{ 

     private Collection<Experience> experiences; 
} 

和經驗

Experience 
{ 
// no reference to Employee 
} 
2

可能是運行成圓形基準。 Experience是否參考EmployeeEmployee參考Experience

如果是這樣,有一對夫婦的解決方案:

  1. Experience
  2. 取出Employee參考創建一個DTO對象:基本上它是與屬性ExperienceEmployee對象不作圓周參考 Employee。它將準備好進行序列化。您的 當前類保持不變。

見馬丁·福勒DTO的概述:

http://martinfowler.com/eaaCatalog/dataTransferObject.html

0

如果你不想刪除從實體引用,有一種變通方法。 使用,

JSONObject response = new JSONObject(); 
response.getJsonConfig(). 
        setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT) 
response.put("empList", employeeList);