2014-01-21 16 views
0

我花了時間來實現的,是什麼問題:彈簧安置servcie prodouces JSON而不是用分貝映射對象

我有一個彈簧安置服務和GET-方法返回一個用戶在JSON-格式。 數據來自我的數據庫over sessionFactory。

經過調試後發現,問題與我的雙向關係 - 多對多關係有關。

所以調用

 User user = (User) sessionFactory.getCurrentSession().load(User.class, userId); 

返回將user.getCity()。getSupplier()運行到com.sun.jdi.InvocationException一個用戶對象。所以傑克遜顯然無法序列化。 但是是什麼導致這種異常?

@Entity 
@Table(name = "T_CITY") 
public class City implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
private long id; 

@OneToMany(mappedBy = "city", cascade=CascadeType.ALL) 
private Set<User> user; 

@OneToMany(mappedBy = "city", cascade=CascadeType.ALL) 
private Set<Supplier> supplier; 

用戶:

@Entity 
@Table(name = "T_USER") 
public class User implements Serializable { 

private static final long serialVersionUID = 1L; 

public User() { 
} 

@Id 
private long id; 

@ManyToOne 
private City city; 

供應商:

@Entity 
@Table(name = "T_SUPPLIER") 
public class Supplier implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
private long id; 

@ManyToOne 
private City city; 
+0

如果你把你的日誌來調試應該看看會發生什麼服務器端。你在使用ORM框架嗎? getUser方法是否返回一個懶加載的實體? –

+0

請顯示用戶級別的源代碼 – shazin

+0

你有沒有在城市用戶的反向映射? – gipinani

回答

0

正如在其他答覆中提到,我想你會發現,你的問題涉及到X到X關係。這有時會在嘗試對實體bean進行json化時創建循環引用問題。

有時你可以通過使用註釋來避免或者避免這種情況,其他時候需要包裝類。我經常寫一個包裝類來處理我的JSON事務

有很多很多這種類型的問題跨越多種語言的參考。這裏有幾個起點供你研究。