2013-08-03 35 views
2

我嘗試更新現有實體,但在使用Ref.create時,將使用緩存的值。客戶對象包括:使用對象化更新現有實體

public class RealEstatePropertyAPI { 
    private Long id; 
    private String name; 
    private AddressAPI address; 
} 

public class AddressAPI { 
    private Long id; 
    private String street; 
    private String city; 
    private String state; 
    private String zip; 
    private String country; 
} 

在服務器端的相應的對象:

@Entity 
public class RealEstateProperty { 
    @Id 
    private Long id; 
    @Parent 
    private Ref<Owner> owner; 
    private String name; 
    @Load 
    private Ref<Address> address; 
} 

@Entity 
public class Address { 
    @Id 
    private Long id; 
    private String street; 
    private String city; 
    private String state; 
    private String zip; 
    private String country; 
} 

我不得不從客戶端轉換到服務器之一的方法對象:

public static RealEstateProperty fromAPI(RealEstatePropertyAPI api, 
     Owner owner) { 
    RealEstateProperty property = new RealEstateProperty(); 
    property.setId(api.getId()); 
    property.setName(api.getName()); 
    property.setOwner(owner); 
    if (api.getAddress() != null) { 
     Address address = AddressConverter.fromAPI(api.getAddress()); 
     String x = address.getStreet(); 
     property.setAddress(address); 
     String y = property.getAddress().getStreet(); 
     System.out.println(x.equals(y)); 
    } 
    return property; 
} 

public static Address fromAPI(AddressAPI api) { 
    Address address = new Address(); 
    address.setId(api.getId()); 
    address.setStreet(api.getStreet()); 
    address.setCity(api.getCity()); 
    address.setState(api.getState()); 
    address.setZip(api.getZip()); 
    address.setCountry(api.getCountry()); 
    return address; 
} 

的問題是在RealEstateProperty.fromAPI,property.setAddress(address);應該設置新的Address,但它不是。爲什麼x.equals(y)返回false?

public void setAddress(Address value) { 
    this.address = Ref.create(value); 
} 

有關更新的實體一個相關的問題:

的方法。以下電話是否更新RealEstateProperty及其子Address

public void update(RealEstateProperty property) { 
    ofy().save().entity(property); 
} 

回答

2

閱讀本文件的裁判節的「其他注意事項」:

https://code.google.com/p/objectify-appengine/wiki/Entities

參考文獻沒有持有實體值;他們只需保存密鑰並讓您直接將該值加載到會話之外(或者數據存儲不在會話中)。如果您想要保留新版本的地址,則需要明確保存()。

另外:因爲Refs不包含實體對象,所以Refs不能級聯保存()。他們只是「指針」。