Tôi có đối tượng tài khoản tham chiếu đến đối tượng người dùng.Xác định đối tượng tải sau Ref <?> ngay cả khi @Load không được chỉ định
@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);
}
}
Tôi đã giấu những Ref theo khuyến cáo ở đây: http://code.google.com/p/objectify-appengine/wiki/Entities - xin lưu ý Ref làm không có chú thích @Load.
Khi tôi gọi Google Cloud Endpoint của mình từ máy khách Android, có vẻ như Objectify cung cấp đối tượng tài khoản với người dùng được nhúng, mặc dù @Load không được chỉ định.
@ApiMethod(name = "account.get")
public Account getAccount(
@Named("id") final Long id
) {
return ofy().load().type(Account.class).id(id).now();
}
Khi tôi truy vấn tài khoản trực tiếp sử dụng Apis Explorer, tôi cũng có được cả hai, chiếm với người sử dụng nhúng:
200 OK
{
"id": "5079604133888000",
"user": { "id": "5723348596162560",
"version": "1402003195251",
"firstName": "Karl" },
"kind": "api#accountItem",
"etag": "\"30khohwUBSGWr00rYOZuF9f4BTE/Q31EvnQCQ6E9c5YXKEZHNsD_mlQ\""}
Điều này đặt ra ba câu hỏi:
- Liệu AppEngine luôn trở lại nhúng Refs nguyên bản và Objectify luôn truyền vào các đối tượng mà nó đã biết chưa?
- Chính xác là gì @Load cho và có cách nào để kiểm soát hành vi này không? Tải nhóm?
- Tôi đã bỏ lỡ điều gì chưa? Tại sao @Load không tuân theo?
Cảm ơn bạn @svpino vì câu trả lời rất chi tiết của bạn và tôi tin rằng điều này là rất quan trọng đối với tất cả những người đang sử dụng phản đối REST **. Nó không rõ ràng với tôi rằng mặc dù tôi không truy cập một cách rõ ràng Ref <> từ mã của tôi, serializer làm như vậy. –
Điều gì xảy ra nếu tôi đặt rõ ràng đối tượng người dùng là null trước khi gửi cho khách hàng? – Dexter