I have following mapping:
1
public class Content {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "content_id", unique = true, nullable = false)
private Long contentId;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "content", cascade = CascadeType.ALL)
UserContent userContent;
....
}
@Entity
@Table(name="user_content")
public class UserContent {
@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "content"))
@Id
@GeneratedValue(generator = "generator")
@Column(name = "content_id", unique = true, nullable = false)
private Long contentId;
@OneToOne(fetch = FetchType.EAGER)
@PrimaryKeyJoinColumn
Content content;
}
and following dao:
public Set<UserContent> getAllContent() {
Session session = sessionFactory.getCurrentSession();
return new HashSet<UserContent>(session.createCriteria(UserContent.class).list());
}
when return result of this dao in controller method I see infinitie recursive json:
[{"contentId":1,"name":"DSC_0029.JPG","moderationStatus":"IN_PROGRESS","moderateComment":"","content":{"userContent":{"contentId":1,"name":"DSC_0029.JPG","moderationStatus":"IN_PROGRESS","moderateComment":"","content":{"userContent":{"contentId":1,"name":"DSC_0029.JPG","moderationStatus":"IN_PROGRESS","moderateComment":"","content":{"userContent":{"contentId":1,"name":"DSC_0029.JPG","moderationStatus":"IN_PROGRESS","moderateComment":"","content":{"userContent":{"contentId":1,"name":"DSC_0029.JPG","moderationStatus":"IN_PROGRESS","moderateComment":"","content":{"userContent":{"contentId":1,"name":"DSC_0029.JPG","moderationStatus":"IN_PROGRESS","moderateComment":"","content":{"userContent":....
2
I tryed to change mapping like this:
import com.fasterxml.jackson.annotation.JsonIgnore;
public class Content {
...
@OneToOne(fetch = FetchType.LAZY, mappedBy = "content", cascade = CascadeType.ALL)
@JsonIgnore //added this annotation
UserContent userContent;
....
result:
HTTP Status 500 - Could not write JSON: failed to lazily initialize a collection of role: com.terminal.domain.TerminalUser.companys, no session or session was closed (through reference chain: java.util.HashSet[0]->com.terminal.domain.UserContent["user"]->com.terminal.domain.TerminalUser["companys"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: com.terminal.domain.TerminalUser.companys, no session or session was closed (through reference chain: java.util.HashSet[0]->com.terminal.domain.UserContent["user"]->com.terminal.domain.TerminalUser["companys"])
P.S.
I have read followig popular answer but I cannot struggle my problem - please help.
Infinite Recursion with Jackson JSON and Hibernate JPA issue