2017-02-27 21 views
3

爲什麼不可能將客體化實體的列表取消索引?如何在Objectify中取消索引列表?

爲了說明問題我做了一個簡單的示例項目。

我使用過該實體

@Entity 
public class Car { 
    @Id String id; 
    @Unindex List<Passenger> passengers; 
} 

一個對象

public class Passenger { 
    String name; 
} 

,並使用這種簡單的方法保存它。

public class CarFactory { 

    public void writeCarEntity() { 
     Car car = new Car(); 
     car.setId("myCar"); 

     List<Passenger> passengers = new LinkedList<Passenger>(); 

     Passenger carl = new Passenger();  
     carl.setName("Carl"); 

     Passenger pete = new Passenger(); 
     pete.setName("Pete"); 

     Passenger jeff = new Passenger(); 
     jeff.setName("Jeff"); 

     passengers.add(carl); 
     passengers.add(pete); 
     passengers.add(jeff); 

     car.setPassengers(passengers); 

     ObjectifyService.register(car.getClass()); 
     ObjectifyService.ofy().save().entity(car).now(); 
    } 
} 

仰望數據存儲中的實體,你會得到這樣的信息:

This is a screenshot from the Datastore

雖然乘客字段有註釋@Unindex將被編入索引,因爲人們可以在谷歌的「數據存儲見」。爲什麼註釋@Unindex在這個例子中沒有效果?

+0

請問您可以發佈您的數據存儲截圖 –

+0

@MichaelMeyer當然,我將它添加到原來的帖子..... –

+0

你是如何保存實體?與物化或你使用類實體? –

回答

1

這是毫無關係的客體,似乎是數據存儲的一些新的怪癖。這可能只是UI中的一個顯示故障。它是否導致問題?

隨着您發佈的代碼,Objectify將在passengers字段(即使沒有@Unindex註釋)調用Entity.saveUnindexedProperty()。但即使Objectify試圖索引它,歷史上你也不能索引嵌入對象,所以目前還不清楚索引它們的列表意味着什麼。也許谷歌正在推出一些新的行爲,他們還沒有正確的圖形用戶界面工作?或者,他們的保存行爲可能存在錯誤?

如果你想成爲一個好公民,創建一個簡單的測試情況與低級別的API(包含List<EmbeddedEntity>類型的屬性的Entity),確認發生此相同的行爲,並在GAE問題提交錯誤跟蹤器。

+0

在我的情況下,* Passenger *不是嵌入式對象。 –

+0

然後你必須使用完全不同於你發佈的代碼。如果你有一個'List '類型的字段,那麼你有一個嵌入對象的列表。 – stickfigure

+0

ohh對不起,我混淆了術語* embedded *和* nested *。所以**乘客**是嵌入式的,但不是嵌套的。 –

相關問題