0

JavaとGAEデータストアを使用して、アプリケーションのデータを保存、管理、取得しています。

基本的に、CustomerとStoreの2つのクラスがあります。1人の顧客が複数の店舗を関連付けることができ、多くの顧客が存在できるという考え方です。

顧客の構造は次のようなものです。

<Customer>
   <id>id1</id>
       <Stores>
           <Store>
               <storeId>100</storeId>
               <city>Venice</city>
           </Store>
           <Store>
                <storeId>200</storeId>
                <city>Milan</city>
           </Store>
           <Store>
                <storeId>300</storeId>
                <city>Venice</city>
           </Store>
       </Stores>
 </Customer>

前に言ったように、多くの顧客がいる可能性があります。

<Customers>
    <Customer>
       ...
    </Customer>
    <Customer>
       ...
    </Customer>
</Customers>

これらの顧客の一部のみを取得するフィルターを作成し、クエリに「CITY」パラメーターを渡す必要があります。たとえば、ヴェネツィアに少なくとも1つの店舗がある顧客を表示する場合は、次のようにします。あなたにアイデアを与えるためだけに)

GET Customer WHERE Customer.Store.City = 'Venice'

私が取得したいのは、特定の都市に店舗を持っているすべての顧客です。また、顧客オブジェクトにはそれらの店舗が必要です。このような:

<Customer>
    <id>id1</id>
       <Stores>
           <Store>
               <storeId>100</storeId>
               <city>Venice</city>
           </Store>
           <Store>
               <storeId>300</storeId>
               <city>Venice</city>
           </Store>
        </Stores>
</Customer>
<Customer>
    <id>id2</id>
       <Stores>
           <Store>
               <storeId>700</storeId>
               <city>Venice</city>
           </Store>
        </Stores>
</Customer>

これらの店舗は正しく入手できますが、すべての店舗を彼の先祖の顧客に接続する方法を見つける必要があります。

String city = 'something';
Query query = mgr.newQuery(Store.class, "city == '"+city+"' ");
List<Store> oggetti = (List<Store>) query.execute();

これを行う方法について何かアイデアはありますか?

私は十分に明確だったと思います..事前に感謝します、よろしくお願いします


追加情報:

クラス顧客:

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
@Cacheable("false")
@FetchGroup(name="customerstores", members={@Persistent(name="storeList")})
public class Customer {

    @PrimaryKey
@Persistent
private String id= "";

    @Persistent
    @Unowned
private List<Store> storeList;

    //getters and setters here
    ....
}

クラスストア:

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
@Cacheable("false")
public class Store {

    @PrimaryKey
@Persistent
private String storeUniqueKey = "";

    @Persistent
    private String city = "";

    //getters and setters here
    ....
}
4

1 に答える 1

2

次のコードが要件に適合するかどうかを確認してください。

Query query = pm.newQuery(Customer.class);
query.declareVariables("Customer store");
query.setFilter(
    "this.stores.contains(store) && store.city == \"SomeCity\"");
Collection result = (Collection)query.execute();
于 2013-02-13T11:45:41.427 に答える