2016-07-25 37 views
0

我有一個UserAccount具有以下列表。以下列表被保存爲自己的實體。我通常不需要以下列表,因此,我不使用@Load。但是,我有一種情況,我想將多個UserAccounts加載到他們的下列位置。Objectify可選加載引用屬性

所以,我需要這樣的:

OfyService.ofy().load().type(UserAccount.class).limit(200).loadReference("followerRef").list(); 

例爲UserAccount:

@Entity 
@Cache 
public class UserAccount { 
    @Id private String email; 
    @Index 
    private String nickname; 
    private Ref<UserFollowing> followingRef; 
} 

回答

2

我相信Objectify已經提供了一種方法做你所追求的在Load Groups形式。正如你正確地指出,使用@Load註解將自動檢索UserAccountsfollowingRef,你不想在大多數情況下發生。

爲了加載的UserAccount列表以及它們followingRef你首先得以下簡單的修改適用於您的實體:

@Entity 
public class UserAccount { 
    public static class Everything {} 

    @Id Long id; 
    @Load(Everything.class) Ref<UserFollowing> followingRef; 
} 

然後,您可以執行以下操作來加載一個UserAccount對象:

// Doesn't load followingRef 
UserAccount ua = ofy().load().key(userAccountKey).now(); 

// Does load followingRef 
UserAccount ua = ofy().load().group(Everything.class).key(userAccountKey).now(); 

與之相似,你這樣做是爲了加載UserAccount對象的列表以及它們followinfRef

// In your case you'd do something like 
List<UserAccount> accounts = ofy().load() 
            .type(UserAccount.class) 
            .group(Everything.class) 
            .list(); 

這應該有希望解決您的問題。 我不知道如果代碼編譯,但如果它不應該太難以解決。

For further reading click here and scroll down to Load Groups section

+0

不錯,謝謝。我希望有一個簡單的清潔解決方案。 – OliverDeveloper