2012-11-25 47 views
9

मुझे अपने जेपीए ईवेंट (पोस्टअपडेट) पर काम करना पड़ा है और जब मैं @ एलीमेंट कोलेक्शन के रूप में मैप किए गए लोगों को छोड़कर अपनी इकाई पर एक संपत्ति अपडेट करता हूं तो वे ठीक से ट्रिगर कर रहे हैं।मेरे EventListeners को मेरे @ElementCollection गुणों के लिए ट्रिगर करने की चाल क्या है?

क्या यह एक प्रतिबंध है? एक विन्यास विकल्प?

यहाँ मेरी इकाई

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
public class Pckg { 
    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(nullable = false, length = 100) 
    private String title; 

    @ElementCollection 
    @CollectionTable (
     name = "PckDest", 
     joinColumns = @JoinColumn(name = "package_id", nullable = false) 
    ) 
    @Column(name = "destination", nullable = false, length = 150) 
    private List<String> destinations; 
    ... 

दूसरे शब्दों में, अगर मैं "शीर्षक" बदलने के परिवर्तन मेरी श्रोता द्वारा catched है का हिस्सा है, लेकिन एक ही नहीं होती है जब मैं "स्थलों" बदलने

मैं हाइबरनेट (4.0) प्रदाता के रूप में साथ जेपीए उपयोग कर रहा हूँ वसंत के माध्यम से (3,1)

धन्यवाद

+0

क्या आप कह सकते हैं कि आप "गंतव्यों" _change के बदले में अधिक विशिष्ट हो सकते हैं? क्या आप सूची बदल रहे हैं या सूची संशोधित कर रहे हैं? – pgreen2

+0

@ pgreen2 thx, जब मैंने कहा _change_ मेरा मतलब किसी भी तरह से था, सूची में एक तत्व जैसे 'गंतव्यों.एड ("एलए"); या बस एक नई सूची सेट करना 'गंतव्यों = नया ArrayList() ... 'तो मैंने' EntityManager.save (xx)' कहा। ऊपर आग से कोई भी मेरी 'onPostUpdate()', जबकि 'Pckg.setTitle (" नया शीर्षक ") कर' मेरी श्रोता सही ढंग से आग – maverick

+0

करता है मैं (कल्पना पर एक संक्षिप्त देखो http://download.oracle.com/ ले लिया otndocs/jcp/persistence-2.0-fr-oth-JSpec /) और गलत होने के कारण मुझ पर कुछ भी नहीं निकलता है। जब घटनाएं होती हैं तो मैंने कुछ नोट्स नोटिस किए। वे तब हो सकते हैं जब संशोधन होता है या जब परिवर्तन फ़्लश हो जाता है। साथ ही, spec यह नहीं बताता कि क्या होता है यदि कोई इकाई संशोधित की जाती है और फिर हटाया जाता है या जोड़ा जाता है और फिर संशोधित किया जाता है। ऐसा लगता है कि इन किनारे के मामलों में आपकी समस्या नहीं है। मेरे पास टेस्ट बेड सेटअप नहीं है। क्या आप अपना श्रोता कोड और टेस्ट कोड पोस्ट कर सकते हैं? – pgreen2

उत्तर

1

कोई अद्यतन मालिक की ओर (PCK तालिका) पर किया जाता है, क्या अद्यतन हो जाता है तालिका जिसमें संग्रह डेटा (PckDest) है।

मुझे लगता है कि यहां तक ​​कि विवाद-योग्य है कि संग्रह की सामग्री को बदलने, एक अद्यतन माना जा सकता है के बाद से यह और अक्सर एक हटाने के रूप में लागू किया जाएगा सकता है और सम्मिलित है।

मुझे लगता है कि आपको इकाई प्रबंधन जीवन चक्र के बाहर ऐसे व्यवहार को संभालना है, या मालिक इकाई के अंदर किसी प्रकार का क्षेत्र है जो सूची परिवर्तन (जैसे किसी प्रकार का चेकसम) पर अपडेट किया जाता है, ताकि जब आप बदल जाए सूची भी माता-पिता को अपडेट किया जाना है (हालांकि मुझे नहीं पता कि यह इतना अच्छा विचार है या नहीं)।

+0

THX, वास्तव में मैं मुख्य तालिका करने के लिए एक आशावादी ताला जोड़ने समाप्त हो गया और कहा कि मेरी श्रोता अंत में कहा जाता हो बनाता है, जब यह संस्करण है। फिर भी कोई कारण नहीं क्यों इस तरह से यह काम चाहिए था काम नहीं कर रहा। – maverick

2

अंत में हम आशावादी लॉकिंग @Version जोड़ने को हल करते हैं, जो मुख्य अभिभावक तालिका में लिखने के लिए हाइबरनेट को मजबूर करता है और हमारे श्रोताओं को बुलाया जाता है।

किसी भी मामले में, यह अभी भी जिस तरह से यह काम करने के लिए चाहिए था काम नहीं कर रहा है, लेकिन लब्बोलुआब यह जगह में आशावादी लॉक करने के लिए चोट नहीं करता है या तो

धन्यवाद

0

हो सकता है कि इस लिंक आप में मदद करता है :

eventlisteners using hibernate 4.0 with spring 3.1.0.release?

ऐसा लगता है कि हाइबरनेट 4 और पंजीकरण के EntityListeners के लिए परिवर्तन की किसी तरह का है जैसे।