मेरे पास वसंत mvc4 + hibernate5 द्वारा कॉन्फ़िगर किया गया एक एंटरप्राइज़ प्रोजेक्ट है जो इसके सभी संबंध उत्सुक हैं और इसका प्रदर्शन बहुत खराब है ... इसलिए मैं सभी उत्सुक संबंधों को आलसी चरण में बदल रहा हूं कदम ... लेकिन मुझे प्रत्येक चरण में कई त्रुटियां दिखाई देती हैं ... और यह कभी-कभी ठीक से काम करती है और कभी-कभी नहीं ....वसंत एमवीसी 4 + हाइबरनेट 5 आलसी लोडिंग कॉन्फ़िगरेशन
इस उदाहरण में हैडरफ्रॉमस्टोर RequestHeaders का एक इंस्टेंस और RequestLine का एक बच्चा है। डिलिवरीपॉइंट अनुरोध का बच्चा हैडर और मैं डिलीवरी नहीं लेना चाहता हूं अनुरोध का प्वाइंट हैडर ... लेकिन अगर इसे चुनिंदा क्वेरी में इस्तेमाल नहीं किया जाता है तो यह हैडरफ्रॉमस्टोर नहीं ला सकता !!
मैंने इस क्वेरी का उपयोग किया और मुझे त्रुटि मिली!
select m from MAMRequestLines m join fetch m.mamRequestHeaders r
left join fetch m.requestHeaderFromStore rr where m.id =:id
अगर मैं इस क्वेरी का उपयोग मैं त्रुटि नहीं मिलता है
select m from MAMRequestLines m join fetch m.mamRequestHeaders r
left join fetch m.requestHeaderFromStore rr
join fetch rr.mamDeliveryPoints
left join fetch r.mamDeliveryPoints
join fetch where m.id =:id
RequestLine.java
@Entity(name = "RequestLines")
@Table(name = "_REQUEST_LINES")
//@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property = "@id")
public class RequestLines extends Entity implements Serializable {
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private RequestHeaders requestHeaders;
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private RequestHeaders requestHeaderFromStore;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "_REQUEST_Line_SEQ")
@SequenceGenerator(name = "_REQUEST_Line_SEQ", sequenceName = "_REQUEST_Line_SEQ")
@Column(name = "REQUEST_LINE_ID")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "REQUEST_HEADER_ID", nullable = false)
public RequestHeaders getRequestHeaders() {
return RequestHeaders;
}
public void setRequestHeaders(RequestHeaders requestHeaders) {
this.RequestHeaders = requestHeaders;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "REQUEST_HEADER_FROM_STORE")
public RequestHeaders getRequestHeaderFromStore() {
return requestHeaderFromStore;
}
public void setRequestHeaderFromStore(RequestHeaders requestHeaderFromStore) {
this.requestHeaderFromStore = requestHeaderFromStore;
}
}
RequestHeader.java
@Entity(name = "RequestHeaders")
@Table(name = "REQUEST_HEADERS")
//@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class RequestHeaders extends Entity implements Serializable {
private long id;
// @JsonInclude(JsonInclude.Include.NON_EMPTY)
// @JsonIgnore
private DeliveryPoints DeliveryPoints;
@JsonIgnore
private Set<RequestLines> RequestLinesSet;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "_REQUEST_HEADERS_SEQ")
@SequenceGenerator(name = "_REQUEST_HEADERS_SEQ", sequenceName = "_REQUEST_HEADERS_SEQ")
@Column(name = "REQUEST_HEADER_ID")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DELIVERY_POINT_ID", nullable = false)
public DeliveryPoints getDeliveryPoints() {
return DeliveryPoints;
}
public void setDeliveryPoints(DeliveryPoints DeliveryPoints) {
this.DeliveryPoints = DeliveryPoints;
}
@OneToMany(mappedBy = "RequestHeaders", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@OnDelete(action = OnDeleteAction.CASCADE)
public Set<RequestLines> getRequestLinesSet() {
return RequestLinesSet;
}
public void setRequestLinesSet(Set<RequestLines> RequestLinesSet) {
this.RequestLinesSet = RequestLinesSet;
}
}
अपवाद:
डोमेन:नहीं serializer के लिए वर्ग org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer पाया और कोई गुण (अपवाद से बचने के लिए, अक्षम SerializationFeature.FAIL_ON_EMPTY_BEANS)) (संदर्भ श्रृंखला के माध्यम से BeanSerializer बनाने के लिए की खोज की .RequestLine [" HeaderFromStore "] - > .domain.RequestHeaders [" DeliveryPoint "] - > domain.DeliveryPoint _ $$ _ jvst393_f [" हैंडलर "])
सूचना है कि मैं (खेतों और वर्ग पर) JsonIgnore और JsonInclude थे, लेकिन उनमें से कोई भी काम नहीं करता है ...
संपादित करें: मैं अंत में इस समाधान अपवाद और अवांछित गुण अनदेखी से बचने के लिए मिल गया। मैं WebMvcConfig extends WebMvcConfigurerAdapter
वर्ग के लिए कोड के इस हिस्से कहा:
{
public MappingJackson2HttpMessageConverter jacksonMessageConverter(){
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
//Registering Hibernate4Module to support lazy objects
mapper.registerModule(new Hibernate4Module());
messageConverter.setObjectMapper(mapper);
return messageConverter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//Here we add our custom-configured HttpMessageConverter
converters.add(jacksonMessageConverter());
super.configureMessageConverters(converters);
}
लेकिन मैं एक और समस्या अब ... सभी पोस्ट अनुरोध अनुरोध शरीर में अशक्त गुणों के साथ .... उदाहरण के लिए इस कोड में के सभी गुण प्राप्त होगा है इनपुट में "अनुरोध हेडर" शून्य या खाली है!
@RequestMapping(value = "/requestHeader/", method = RequestMethod.POST, consumes = {"application/json"})
public ResponseEntity<Void> createRequestHeaders(@RequestBody RequestHeaders requestHeaders, UriComponentsBuilder ucBuilder) {
requestHeaders.setDeliveryPoints(deliveryPointsService.find(requestHeaders.getDeliveryPointsId()));
requestHeadersService.add(requestHeaders);
HttpHeaders headers = new HttpHeaders();
return new ResponseEntity<Void>(headers, HttpStatus.CREATED);
}
क्या आप एमवीसी कॉन्फ़िगरेशन क्लास में अपना हाइबरनेट 5 बीन दिखा सकते हैं? – Generic
@ जेनेरिक मैंने पिछली समस्या हल की और अब मुझे एक और समस्या है ... मैंने अपनी पोस्ट संपादित की ... और मैंने एमवीसी कॉन्फ़िगरेशन क्लास के कुछ हिस्सों को जोड़ा ... अगर किसी अन्य कोड को जवाब देने की आवश्यकता है तो मुझे बताएं ...धन्यवाद :) – faraa
मुझे लगता है कि आपने हल किए गए अपने प्रश्न के अनावश्यक हिस्से को दूर करना बेहतर है। यदि आपका आलसी लोडिंग कार्य उस भाग को हटा देता है। – Generic