2010-02-18 15 views
5

Google appengine 1.3.0 w/java और jdo ...एपेंगिन डेटास्टोर एंटिटी को मेरे ऑब्जेक्ट में कनवर्ट करने का एक तरीका?

1-से-कई स्वामित्व वाले रिश्तों के लिए जेडीओ क्वेरी लिखने की कोशिश करते समय, मैं एक गैर-जेडीओ अवधारणा में आया जो मैंने सोचा था कि वास्तव में स्मार्ट था। पूर्वज प्रश्न Appengine.api.datastore.Query इंटरफ़ेस पैरेंट कुंजी का उपयोग कर क्वेरी की स्कॉइंग करने की अनुमति देता है।

दुर्भाग्यवश क्वेरी से परिणाम संपत्ति सूची के साथ 'Entity' ऑब्जेक्ट्स हैं। क्या एपिस में कोई उपयोग है जो इन इकाइयों में से किसी एक को मेरी जेडीओ ऑब्जेक्ट में परिवर्तित कर देगा या यहां तक ​​कि एक साधारण डीटीओ बीन (जो मेरी जेडीओ ऑब्जेक्ट से मेल खाता है)?

मैंने नीचे दिए गए कोड के साथ इसे मजबूर करने के लिए एक क्रूर लिया है लेकिन डबल लुकअप पसंद नहीं है।

PersistenceManager pm; 
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
List<MyObject> results; 

com.google.appengine.api.datastore.Query query = new Query("MyObject", KeyFactory.stringToKey(parentId)); 
query.addFilter("rank", Query.FilterOperator.GREATER_THAN_OR_EQUAL, minRank); 
query.addSort("rank"); 
query.setKeysOnly(); 
for (Entity anEntity : datastore.prepare(query).asIterable()) { 
    results.add(pm.getObjectById(MyObject.class, anEntity.getKey())); 
} 

उत्तर

4

यह चांदी की गोली नहीं है जो मुझे लगता है कि आप ढूंढ रहे थे; इसे पूरा करने के लिए कुछ परेशान काम की आवश्यकता है।

डीएओ कोड

DatastoreService datastore = DatastoreServiceFactory 
.getDatastoreService(); 
List<Foo> results = new ArrayList<Foo>(); 

Query query = new Query("Foo", KeyFactory.stringToKey("")); 
List<Entity> entities = datastore.prepare(query).asList(
    FetchOptions.Builder.withDefaults()); 

for (Entity entity : entities) { 
    results.add(new Foo(entity)); 
} 

वर्ग फू

public Foo(Entity entity) { 
    // TODO get properties from entity and populate POJO 
    this.bar=entity.getProperty("bar"); 
    //get the key 
    //if the @PrimaryKey is a Long use this 
    this.id=entity.getKey().getId(); 
    //if the @PrimaryKey is a String use this 
    this.id=entity.getKey().getName(); 
} 
5

आप उपयोग कर सकते org.datanucleus.store.appengine.JDODatastoreBridge.toJDOResult()

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