将休眠对象列表放入 JSON 对象中



我想将休眠对象列表添加到 JSON 对象中,但我得到StackOverflowError.

我也尝试了@JsonBackReference("mamRequestHeaders.mamRequestLinesSet")MAMRequestLine.java@JsonManagedReference("mamRequestHeaders.mamRequestLinesSet")MAMRequestHeader.java但问题没有解决。

java.lang.StackOverflowError at java.lang.reflect.InvocationTargetException.(InvocationTargetException.java:72) at sun.reflect.GeneratedMethodAccessor494.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.json.JSONObject.populateMap(JSONObject.java:988) at org.json.JSONObject.(JSONObject.java:272) 在 org.json.JSONObject.wrap(JSONObject.java:1587) at org.json.JSONArray.(JSONArray.java:158) at org.json.JSONObject.wrap(JSONObject.java:1569) at org.json.JSONObject.populateMap(JSONObject.java:990) at org.json.JSONObject.(JSONObject.java:272) 在 org.json.JSONObject.wrap(JSONObject.java:1587) at org.json.JSONObject.populateMap(JSONObject.java:990)

MAMRequestHeaders

@Entity(name="MAMRequestHeaders")
@Table(name = "MAM_REQUEST_HEADERS", uniqueConstraints = @UniqueConstraint(columnNames = {"REQUEST_TYPE", "NUM_REQUEST_MREQH"}))
public class MAMRequestHeaders  implements Serializable {
private long id ;
private Set<MAMRequestLines> mamRequestLinesSet;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MAM_REQUEST_HEADERS_SEQ")
@SequenceGenerator(name = "MAM_REQUEST_HEADERS_SEQ", sequenceName = "MAM_REQUEST_HEADERS_SEQ")
@Column(name = "REQUEST_HEADER_ID")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@OneToMany(mappedBy = "mamRequestHeaders", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
public Set<MAMRequestLines> getMamRequestLinesSet() {
return mamRequestLinesSet;
}
public void setMamRequestLinesSet(Set<MAMRequestLines> mamRequestLinesSet) {
this.mamRequestLinesSet = mamRequestLinesSet;
}
} 

MAMRequestLines

@Entity(name = "MAMRequestLines")
@Table(name = "MAM_REQUEST_LINES", uniqueConstraints = @UniqueConstraint(columnNames = {"REQUEST_HEADER_ID", "NUM_LINE_MREQL"}))
public class MAMRequestLines implements Serializable {
private Long id;
@JsonIgnore
private MAMRequestHeaders mamRequestHeaders;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MAM_REQUEST_Line_SEQ")
@SequenceGenerator(name = "MAM_REQUEST_Line_SEQ", sequenceName = "MAM_REQUEST_Line_SEQ")
@Column(name = "REQUEST_LINE_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "REQUEST_HEADER_ID", nullable = false)
public MAMRequestHeaders getMamRequestHeaders() {
return mamRequestHeaders;
}
public void setMamRequestHeaders(MAMRequestHeaders mamRequestHeaders) {
this.mamRequestHeaders = mamRequestHeaders;
}
}

创建结果

List<MAMRequestHeaders> mamRequestHeadersList =  manager.createQuery(queryStr, MAMRequestHeaders.class)
JSONObject result = new JSONObject();
result.put("resultList", mamRequestHeadersList);

@OneToMany集合上添加@JsonManagedReference,在@ManyToOne字段上@JsonBackReference。请参阅下面的更新示例。

MAMRequestHeaders

@Entity(name="MAMRequestHeaders")
@Table(name = "MAM_REQUEST_HEADERS", uniqueConstraints = @UniqueConstraint(columnNames = {"REQUEST_TYPE", "NUM_REQUEST_MREQH"}))
public class MAMRequestHeaders  implements Serializable {
private long id;
@JsonBackReference
private Set<MAMRequestLines> mamRequestLinesSet;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MAM_REQUEST_HEADERS_SEQ")
@SequenceGenerator(name = "MAM_REQUEST_HEADERS_SEQ", sequenceName = "MAM_REQUEST_HEADERS_SEQ")
@Column(name = "REQUEST_HEADER_ID")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@OneToMany(mappedBy = "mamRequestHeaders", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
public Set<MAMRequestLines> getMamRequestLinesSet() {
return mamRequestLinesSet;
}
public void setMamRequestLinesSet(Set<MAMRequestLines> mamRequestLinesSet) {
this.mamRequestLinesSet = mamRequestLinesSet;
}
} 

MAMRequestLines

@Entity(name = "MAMRequestLines")
@Table(name = "MAM_REQUEST_LINES", uniqueConstraints = @UniqueConstraint(columnNames = {"REQUEST_HEADER_ID", "NUM_LINE_MREQL"}))
public class MAMRequestLines implements Serializable {
private Long id;
@JsonManagedReference
private MAMRequestHeaders mamRequestHeaders;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MAM_REQUEST_Line_SEQ")
@SequenceGenerator(name = "MAM_REQUEST_Line_SEQ", sequenceName = "MAM_REQUEST_Line_SEQ")
@Column(name = "REQUEST_LINE_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "REQUEST_HEADER_ID", nullable = false)
public MAMRequestHeaders getMamRequestHeaders() {
return mamRequestHeaders;
}
public void setMamRequestHeaders(MAMRequestHeaders mamRequestHeaders) {
this.mamRequestHeaders = mamRequestHeaders;
}
}

但实际上配置 JSON 注释取决于所需的输出。例如,您还可以在MAMRequestLines课的getMamRequestHeaders()上放@JsonIgnore

最新更新