2017-10-18 23 views
9

मेरे पास वसंत 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); 

    } 
+1

क्या आप एमवीसी कॉन्फ़िगरेशन क्लास में अपना हाइबरनेट 5 बीन दिखा सकते हैं? – Generic

+0

@ जेनेरिक मैंने पिछली समस्या हल की और अब मुझे एक और समस्या है ... मैंने अपनी पोस्ट संपादित की ... और मैंने एमवीसी कॉन्फ़िगरेशन क्लास के कुछ हिस्सों को जोड़ा ... अगर किसी अन्य कोड को जवाब देने की आवश्यकता है तो मुझे बताएं ...धन्यवाद :) – faraa

+1

मुझे लगता है कि आपने हल किए गए अपने प्रश्न के अनावश्यक हिस्से को दूर करना बेहतर है। यदि आपका आलसी लोडिंग कार्य उस भाग को हटा देता है। – Generic

उत्तर

0

आप प्रत्येक संस्थाओं जो संबंध वर्ग परिभाषा के शीर्ष पर यह व्याख्या है जोड़ना चाहिए।

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) 

विवरण here और here

मुझे आशा है कि इन आपकी समस्या नहीं सुलझती समझाया गया है।

संबंधित मुद्दे