2011-08-04 8 views
8

पुनरीक्षण डेटा को संशोधित करने वाले प्रत्येक ऑब्जेक्ट को संग्रहीत किया जाता है _AUD तालिका में एक अलग रिकॉर्ड मिलता है। तो जब मैं वस्तु A को प्रभावित करने वाले संशोधन के लिए खोज, मैं प्रवेश जहां संशोधन वस्तु B के लिए 3 है वापस मिल जाएगा, लेकिन अगर वस्तुओं A और/या C भी संशोधन 3 में बदल रहे थे, यह इन प्रविष्टियों को लौट आए, आभास होता कि नहीं कर रहे हैं कि B उस संशोधन में संशोधित एकमात्र वस्तु थी। मैं जो करने की कोशिश कर रहा हूं वह ऑब्जेक्ट B को प्रभावित करने वाले प्रत्येक संशोधन के लिए है, उस संशोधन से प्रभावित सभी ऑब्जेक्ट्स को वापस करें।पूर्ण हो जाएं संशोधनों को सक्षम करता है जहां एक विशेष वस्तु प्रभावित होती है

AuditQuery query = AuditReaderFactory.get(entity.em()).createQuery() 
.forRevisionsOfEntity(type, false, true) 
.add(AuditEntity.id().eq(entity.id)); 

और उसके बाद प्रत्येक परिणाम के लिए निम्न क्वेरी चलाने:

int rev_id = ((RevisionData) data[1]).getId(); 
AuditQuery q = AuditReaderFactory.get(JPA.em()).createQuery() 
.forRevisionsOfEntity(type, false, true) 
.add(AuditEntity.revisionNumber().eq(rev_id)); 
List<Object[]> real_data = q.getResultList(); 

 
something_AUD  desired  actual 

id|REV   id|REV  id|REV 
-------------  -------  ------ 
A|1    B|2   B|2 
B|2    B|3   B|3 
B|3    C|3 
C|3 

मैं एक प्रारंभिक क्वेरी चलाने प्रासंगिक संशोधन को खोजने के लिए कर ऐसा करते हैं करने की कोशिश कर रहा है लेकिन इसके परिणामस्वरूप QuerySyntaxException:

उपनाम 'आर' की डुप्लिकेट परिभाषा [ मॉडल से चयन ई, आर, आर। एजेन्टशफ्ट_एयूडी ई, मॉडल। रिविजन डेटा आर, मॉडल। रिविजनडाटा आर जहां e.originalId.REV.id (: _p0) और e.originalId में e.originalId.REV.id। REV.id = r.id और e.originalId.REV.id में (: _p1) और e.originalId.REV.id = r.id ऑर्डर e.originalId.REV.id asc, e.originalId.REV .id asc]

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

+0

सुनिश्चित नहीं है कि आपका क्या मतलब है: "लेकिन यदि अन्य संस्थाएं भी उन संशोधनों से प्रभावित होती हैं, तो उन प्रविष्टियों को वापस नहीं किया जाता है"। एक उदाहरण यह समझने में मदद करेगा कि आप क्या हासिल करने की कोशिश कर रहे हैं और आप जिन समस्याओं का सामना कर रहे हैं। –

+0

अद्यतन के बाद जोड़ा गया: मुझे नहीं लगता कि आप एन्पी एपीआई के साथ ऐसा कर सकते हैं, आपको जेपीए का उपयोग करना होगा क्योंकि आप एक ही क्वेरी में एकाधिक तालिकाओं से पूछताछ करने का प्रयास कर रहे हैं: http://ezingsoft.com/ ? पी = 52 –

+0

क्या इकाई 'बी' में इकाई 'ए' और 'सी' के साथ कुछ संबंध संबंध हैं? – Naros

उत्तर

0

यही वह है जो मैंने अभी तक किया है। यह न साफ ​​समाधान है, लेकिन यह काम करता है:

AuditReader reader = AuditReaderFactory.get(entity.em()); 
AuditQuery query = reader.createQuery() 
.forRevisionsOfEntity(type, false, true) 
.add(AuditEntity.id().eq(entity.id)); 

List<Object[]> raw_results = query.getResultList(); 
List<Object[]> complete_results = new ArrayList<Object[]>(raw_results.size()); 

for (Object[] data : raw_results) { 
    int rev_id = ((RevisionData) data[1]).getId(); 
    AuditQuery q = reader.createQuery() 
    .forRevisionsOfEntity(type, false, true) 
    .add(AuditEntity.revisionNumber().eq(rev_id)); 
    List<Object[]> real_data = q.getResultList(); 
    complete_results.addAll(real_data); 
} 

उम्मीद है कि किसी को एक यह है कि यह किसी एक क्वेरी में कर सकते हैं एक बेहतर तरीका के साथ आने के, विशेष रूप से होगा।

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