1

我有自參照類自引用記錄導致「直接自我引用導致循環」異常

@Entity 
@Table(name = "contacts") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
@Document(indexName = "contacts") 
public class Contacts implements Serializable 
{ 

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

@Column(name = "username") 
private String username; 

@Column(name = "password_smartlpc") 
private String password; 

@Column(name = "full_name") 
private String fullName; 

@ManyToOne 
private Contacts companyContact; 
} 

但是對於我一個數據庫記錄

id full_name username password company_contact_id 
5 JAK movies abc   xyz    5 

這個紀錄company_contact_id爲自我id.Which當檢索進入自我參考週期。

Enter: com.fps.web.rest.errors.ExceptionTranslator.processRuntimeException() 
with argument[s] = 
[org.springframework.http.converter.HttpMessageNotWritableException: Could not 
write content: Direct self-reference leading to cycle (through reference 
chain: java.util.UnmodifiableRandomAccessList[2]- 
>com.fps.domain.Contacts["companyContact"]- 
>com.fps.domain.Contacts["companyContact"]); nested exception is 
com.fasterxml.jackson.databind.JsonMappingException: Direct self-reference 
leading to cycle (through reference chain: 
java.util.UnmodifiableRandomAccessList[2]- 
    >com.fps.domain.Contacts["companyContact"]- 
>com.fps.domain.Contacts["companyContact"])]  

解決我已經試過

(fetch = FetchType.LAZY) = gives same error as above. 
@JsonIgnore : removes error but does not retrieves Company_Contact_id 
@JsonManagedReference @JsonBackReference same as above. 

不幸的是我不能改變數據庫或者改變其it.Since更legacy.Any東西我可以嘗試? 感謝

回答

0

在JHipster嘗試using DTOs,你會挺過來的JSON序列化更多的控制,而不是簡單地暴露你的實體尤其是當你用傳統數據庫架構的限制。

+0

謝謝先生,這有助於很多:) –