I want to add a list of Hibernate objects into a JSON object but I get StackOverflowError
.
I also tried @JsonBackReference("mamRequestHeaders.mamRequestLinesSet")
in MAMRequestLine.java
and @JsonManagedReference("mamRequestHeaders.mamRequestLinesSet")
in MAMRequestHeader.java
but the problem was not resolved.
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) at 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) at org.json.JSONObject.wrap(JSONObject.java:1587) at org.json.JSONObject.populateMap(JSONObject.java:990)
MAMRequestHeaders
class
@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
class
@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;
}
}
Creating result
List<MAMRequestHeaders> mamRequestHeadersList = manager.createQuery(queryStr, MAMRequestHeaders.class)
JSONObject result = new JSONObject();
result.put("resultList", mamRequestHeadersList);
1条答案
按热度按时间kgsdhlau1#
在
@OneToMany
集合中添加@JsonManagedReference
,在@ManyToOne
域中添加@JsonBackReference
。请参阅下面更新的示例。MAMRequestHeaders
类MAMRequestLines
类但是实际上JSON注解的配置取决于你想要的输出,例如你也可以把
@JsonIgnore
放在MAMRequestLines
类的getMamRequestHeaders()
上。