मुझे इस पर संसाधनों के ओडल्स मिल गए हैं, जैसे कि यह एक - Infinite Recursion with Jackson JSON and Hibernate JPA issue। मेरे पास ने को वर्णित सभी विभिन्न सुझावों को लागू करने के लिए प्रयास किया है (मूल @ जेसन इग्नोर सहित), लेकिन इसका कोई फायदा नहीं हुआ। मैं जो कोशिश करता हूं उसके बावजूद मैं अनंत रिकर्सन त्रुटियों के अलावा कुछ भी नहीं प्राप्त कर सकता हूं। मुझे लगता है कि मेरे पास एक बहुत ही समान/विशिष्ट सेटअप है, लेकिन जाहिर है कि @JsonManagedReference, @JsonBackReferencere और @JsonIdentityInfo एनोटेशन का उपयोग करने के बावजूद कुछ गलत है, मुझे त्रुटि मिल रही है।जैक्सन जेएसओएन और हाइबरनेट जेपीए मुद्दे के साथ अनंत रिकर्सन (अभी तक एक और)
मेरी टेबल "एक्सचेंज" और "स्टॉक" हैं, जिनमें से कई के बीच कई हैं, और मैं ExchangeEndpoint के माध्यम से परीक्षण कर रहा हूं। मैंने पुष्टि की है कि अगर मैं पूरी तरह से "एक्सचेंज" इकाई से "स्टॉक" को हटा देता हूं, तो सेवा ठीक काम करती है, लेकिन किसी कारण से, जेसन एनोटेशन का कोई असर नहीं पड़ता है। नीचे मैं सोचता हूं उपरोक्त Infinite Recursion with Jackson JSON and Hibernate JPA issue में दूसरे (लेकिन अधिक लोकप्रिय) उत्तर पर आधारित समाधान है।
Exchange.java
@Entity
@Table(name = "exchange", schema = "public")
@XmlRootElement
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class Exchange implements java.io.Serializable {
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "exchange")
@JsonManagedReference
public Set<Stock> getStocks() {
return this.stocks;
}
...
Stock.java
@Entity
@Table(name = "stock", schema = "public")
@XmlRootElement
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class Stock implements java.io.Serializable {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "exchangeid", nullable = false)
@JsonBackReference
@JsonIgnore
public Exchange getExchange() {
return this.exchange;
}
...
ExchangeEndpoint.java
@Stateless
@Path("/exchanges")
public class ExchangeEndpoint {
@PersistenceContext(unitName = "postgresql-ss4")
private EntityManager em;
...
@GET
@Produces("application/json")
public List<Exchange> listAll(@QueryParam("start") Integer startPosition,
@QueryParam("max") Integer maxResult) {
TypedQuery<Exchange> findAllQuery = em
.createQuery(
"SELECT DISTINCT e "
+ "FROM Exchange e "
+ "LEFT JOIN FETCH e.stocks "
+ "ORDER BY e.exchangeid",
Exchange.class);
if (startPosition != null) {
findAllQuery.setFirstResult(startPosition);
}
if (maxResult != null) {
findAllQuery.setMaxResults(maxResult);
}
final List<Exchange> results = findAllQuery.getResultList();
return results;
}
संपादित करें:
त्रुटि उत्पादन का यकीन है कि मैं 'होने के लिए मैं misinterpretin नहीं है जी कुछ;
15: 35: 16,406 त्रुटि [org.jboss.resteasy.resteasy_jaxrs.i18n] (http-/0.0.0.0: 8080-1) RESTEASY000100: org.jboss: /आदान-प्रदान/प्राप्त क्रियान्वित करने में विफल रहा। resteasy.spi.WriterException: org.codehaus.jackson.map.JsonMappingException: अनंत रिकर्सन (स्टैक ओवरव्लो एरर) (संदर्भ श्रृंखला के माध्यम से: net.hb.forge2RestServices.model.Exchange ["स्टॉक"] -> org.hibernate.collection .internal.PersistentSet [0] -> net.hb.forge2RestServices.model.Stock ["exchange"] -> net.hb.forge2RestServices.model.Exchange ["स्टॉक"] -> org.hibe ... । .. एक्सचेंज ["स्टॉक"] -> org.hibernate.collection.internal.P ersistentSet [0] -> net.hb.forge2RestServices.model.Stock ["exchange"] -> net.hb.forge2RestServices.model.Exchange ["स्टॉक"]) org.jboss.resteasy.core.ServerResponse.writeTo पर (ServerResponse.java2362)
कृपया मुझे बताएं कि मैं अपनी हार को समझाने में सहायता के लिए कौन सी अतिरिक्त जानकारी प्रदान कर सकता हूं। tiy।
मैं अलग अलग तरीकों की एक जोड़ी में JsonIgnore एनोटेशन जोड़ने की कोशिश की, लेकिन यह अभी भी नहीं लगता है कुछ भी की तरह अलग ढंग से व्यवहार कर रहा है। मैंने उन लोगों में से एक के साथ मूल प्रश्न अपडेट किया, जहां मैंने इसे अभी तक संभाला, लेकिन मैंने जेसनबैक रेफरेंस को बदलने की कोशिश की और एनोटेशन को क्षेत्र परिभाषा (गेटटर के बजाए) में स्थानांतरित करने की कोशिश की, लेकिन मुझे एक ही परिणाम मिलते हैं। क्या कोई तरीका है कि इन टिप्पणियों को अस्वीकार कर दिया जा सकता है? – swv