Ho un oggetto account che fa riferimento a un oggetto utente.Objectify carica oggetto dietro Rif. <?> anche quando @Load non è specificato
@Cache
@Entity
public final class Account {
@Id Long id;
@Index private Ref<User> user;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getUser() {
return user.get();
}
public void setUser(User user) {
this.user = Ref.create(user);
}
}
ho nascosto le Rif come consigliato qui: http://code.google.com/p/objectify-appengine/wiki/Entities - si prega di notare il Rif fa non hanno l'annotazione @Load.
Quando chiamo Google Cloud Endpoint da un client Android, sembra che Objectify fornisca l'oggetto account con l'utente incorporato, anche se @Load non è specificato.
@ApiMethod(name = "account.get")
public Account getAccount(
@Named("id") final Long id
) {
return ofy().load().type(Account.class).id(id).now();
}
Quando interrogo l'account direttamente utilizzando le API Explorer, ho anche ottenere entrambi, account con l'utente incorporato:
200 OK
{
"id": "5079604133888000",
"user": { "id": "5723348596162560",
"version": "1402003195251",
"firstName": "Karl" },
"kind": "api#accountItem",
"etag": "\"30khohwUBSGWr00rYOZuF9f4BTE/Q31EvnQCQ6E9c5YXKEZHNsD_mlQ\""}
Questo solleva tre questioni:
- fa AppEngine restituiscono sempre i Ref incorporati in modo nativo e Objectify trasmettono sempre oggetti che già conosce?
- Cos'è esattamente @Load e c'è un modo per controllare questo comportamento? Carica gruppi?
- Ho perso qualcosa? Perché @Load non è ubbidito?
Grazie @svpino per la risposta molto dettagliata e credo che questo è ** molto importante per tutti coloro che sta usando oggettivare con il riposo **. Non mi è stato chiaro che anche se non accedo esplicitamente al codice <> dal mio codice, il serializzatore lo fa. –
Cosa succede se imposto l'oggetto utente come null prima di inviarlo al client? – Dexter