2011-07-20 13 views
1

Google App Engineの内部データ型では、Javaのデータ型ではなく、このエンティティがあります。
以下のコードは明らかに簡略化されています。実際には、私はではありません。はエンティティのプロパティまたはそれに関する他のものを知っていません。 App EngineのJava codeGoogle App Engineエンティティのプロパティデータ型の処理

final DatastoreService dss = DatastoreServiceFactory.getDatastoreService(); 
final Query query = new Query("Person"); 
final PreparedQuery pq = dss.prepare(query); 

for (Entity entity : pq.asIterable()) 
{ 
    final Object property = entity.getProperty("some_property"); 
    // Here I want to determine which data type 'property' represents - GAE-wise. 
} 

私はいくつかのヒントを見つけた。

DataTypeTranslator 
    DataTypeTranslator.typeMap (internal private member) 
Property.Meaning.GD_PHONENUMBER 

私は私が必要なものの中に一緒にそれらをリンクすることができないんだ - 反射のいくつかの並べ替えを。

私はこのような何かを行うことができたことを望む:

entity.getPropertyType("some_property"); 

誰もがよく知っていますか?

DataTypeTranslator source code here

編集#1:< < の違いを無視この1。私はこれらのポストフィックスを書いてくれました(私はドキュメントで混乱しました)。
ここに私が見つけたより重要な情報があります。
エンティティ(データストアからフェッチしたもの)をポイントするとEclipseのツールチップのミニウィンドウが表示されます。
Datastoreは、このペイロードを生のテキストとして送信しているようですが、それを解析する必要があるかもしれません(ただし、コードLOLからどのように取得しますか)。
ここのタイプに注意してください、それは単純明快に書かれています。
ここでは、次のとおりです。たとえば

<Entity [Bird(9)]: 
    Int64Type:44rmna4kc2g23i9brlupps74ir#Int64Type = 1234567890 
    String:igt7qvk9p89nc3gjqn9s3jq69c = 7tns1l48vpttq5ff47i3jlq3f9 
    PhoneNumber:auih50aecl574ud23v9h4rfvt1#PhoneNumberType = 03-6491234 
    Date:k1qstkn9np0mpb6fp41cj6i3am = Wed Jul 20 23:03:13 UTC 2011 
> 

String:igt7qvk9p89nc3gjqn9s3jq69cという名前のプロパティが7tns1l48vpttq5ff47i3jlq3f9の値を持っており、その種類を教えてくれません。プロパティDate:k1qstkn9np0mpb6fp41cj6i3amもあります。
名前がInt64Type:44rmna4kc2g23i9brlupps74irのプロパティの値は「1234567890」です。ここでは、データ型が「Int64Type」であることを厳密に記述しています。

+0

戻ってきたオブジェクトがどのJava型か確認できませんか? Javaとデータストア型の間には1:1のマッピングがあるはずです。 –

答えて

0

私はそれも探しています。

ハックのビットですが、少なくとも私の出力にはタイプが含まれています(秘密のデコーダリングを必要としません)。しかし、私のコードは若干異なります。

Query allusersentityquery = new Query(); 
allusersentityquery.setAncestor(userKey); 

for (final Entity entity : datastore.prepare(allusersentityquery).asIterable()) { 
    Map<String, Object> properties = entity.getProperties(); 
    String[] propertyNames = properties.keySet().toArray(
     new String[properties.size()]); 

    for(final String propertyName : propertyNames) { 
     // propertyNames string contains 
     // "com.google.appengine.api.datastore.PostalAddress" if it is a Postal Address 
    } 
} 

プロパティタイプhereの決定についての文書はないように思えます。

関連する問題