2015-03-15 8 views
5

समस्या के साथ स्टोर जेपीए इकाई पीछा कर रहा है:भी क्षेत्र वस्तु आईडी के बजाय वस्तु ही

हम इकाई है:

@Entity 
public class Feedback { 
    @Id 
    @GeneratedValue(generator="token") 
    private String id; 

    @ManyToOne 
    private Product product; 

    private String message; 

    // other fields 
} 

और हम एक सर्वर endpoint, कि ग्राहकों से प्रतिक्रिया प्राप्त करता है। प्रतिक्रिया, बहुखण्डीय/प्रपत्र-आधारित प्रारूप में प्राप्त क्षेत्रों के साथ:

ProductId - product identifier 
Message - feedback message 
Some other fields 

Feedback.product सेट करने के लिए हम जेपीए से उत्पाद वस्तु लोड करने के लिए की जरूरत है - इस समय लेने वाली हो सकती है और यह अनावश्यक प्रश्नों पैदा करता है।

क्या इकाई को स्टोर करना संभव है, लेकिन उत्पाद ऑब्जेक्ट के बजाय उत्पाद आईडी पास करें? हमें INSERT क्वेरी को संशोधित करने के लिए कुछ तरीका चाहिए।

हम स्प्रिंग और वाडिन के साथ एक्लिप्ससेंक जेपीए का उपयोग करते हैं।

उत्तर

6

EntityManager.getReference() का उपयोग करें: यदि इकाई पहले से लोड नहीं होती है, तो यह आईडी के चारों ओर एक आलसी-प्रारंभिक प्रॉक्सी बनाता है, बिना किसी SQL क्वेरी को निष्पादित किए।

+0

धन्यवाद। यह जांचना संभव है कि इकाई मौजूद है या नहीं? या अगर किसी आईडी के साथ कोई इकाई नहीं है, तो getReference को अपवाद फेंकने के लिए मजबूर करें? –

+0

ढूंढें का उपयोग करें। लेकिन फिर आपके पास एक प्रश्न होगा, जिसे आप टालना चाहते थे। –

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