2014-10-28 77 views
0

我有一個數據存儲「表」與多個字段。其中一個字段是一個名爲banned的布爾值。我用它來禁止用戶。根據我的設計,除了由人類主持人設置外,永遠不會設置該字段。但是,這是因爲該字段的任何實例都不是True,它不存在於數據存儲區中。因此,當用戶創建帳戶時,我試圖強制該字段被明確設置爲false。但當然這沒有什麼區別。所以我的問題是這樣的:如何讓應用引擎數據存儲顯示我的布爾字段,即使它是假的?請注意,我只是將該字段添加到現有的數據庫。當然,我正在創建一個新帳戶,以查看該字段是否顯示爲新帳戶的false以及現有帳戶的常規<missing>。但沒有。datastore不顯示false布爾值

回答

0

實際上明確地將布爾值設置爲false是正確的方法。因此,我的猜測是,您將它設置爲false的地方不會執行。也許它是在沒有達到的if或其他條件之內。所以仔細研究一下。

Java開發人員的注意事項。通常不需要將布爾值設置爲false,因爲這是默認值。但在這種情況下,您必須設置它或將其初始化爲false。

+0

這不是Java問題,它是Datastore問題。除非實際使用它,否則不需要將屬性設置爲數據存儲區實體。在這種情況下,財產的缺位與設置爲「虛假」的財產一樣好。 – 2014-10-29 03:19:42

2

「因爲沒有現場的情況是真實的,它不存在於數據存儲...」

如果設置一個屬性,該實體將擁有它。其他實體是否擁有相同的財產並不重要。如果您設置了一個屬性並且沒有看到它,那麼在某個地方會出現錯誤。

「所以我試圖強行場......通過它明確設置爲false ......」

沒有必要那樣做。如果「false」是默認設置,則不需要存儲它。例如(使用Datastore API):

if (user.isBanned()) { 
    entity.setProperty("banned", true); 
} 

Boolean banned = (Boolean) entity.getProperty("banned"); 
user.setBanned(banned != null && banned); 

這是特別有用的,如果「禁止」是索引屬性。因爲希望絕大多數用戶不被禁止,所以它將爲您的空間節省「禁用」的財產 - 併爲其創建索引 - 僅用於禁止的用戶。

+0

當然,真正的問題是,如果你沒有推斷,沒有一個領域,我不能去手動把它變成「真」。所以我需要這個領域的存在。而且,實際上,如果該字段至少有一個「True」實例,那麼所有新實例實際上都會顯示爲「False」。所以真的沒有,因爲沒有任何'真實'。 – 2014-10-28 21:31:57

+0

那麼你是說我的問題是dataNucleus,如果我使用數據存儲api它會工作?我不清楚你剛纔的意思。請爲我澄清。謝謝。 – 2014-10-28 21:34:35

+0

首先,我建議不要在Datastore查看器中手動執行任何操作,除非是緊急情況 - 您可能會輕易破壞數據。如果您沒有適當的管理員應用程序(或至少一個頁面)進行用戶管理,請創建一個簡單的處理程序來禁止用戶。其次,「如果該字段至少有一個True實例,那麼所有新實例實際上將顯示爲False」 - 這不是Datastore的工作方式。你的代碼中有一些東西把(或不)這個屬性設置爲「false」或「true」。 – 2014-10-29 03:27:00