2014-01-28 42 views
0

我正在研究爲我的Android應用程序使用greenDAO,但我注意到它似乎不支持除「不爲空」,「唯一」和外鍵以外的任何類型的數據驗證在SQL級別(創建表時定義的約束)或Java級別(setter方法中的驗證邏輯)。 「保留部分」在這種情況下似乎不會有幫助,因爲您無法在各種方法中使用它們。如果我想驗證輸入數據,我是否錯過了某些東西,還是真的需要在生成的Java對象之上添加另一個圖層? (我有點糊塗了框架如何能是有用的,而不提供任何地方,包括驗證邏輯。)greenDAO和數據驗證

+0

你的意思是什麼樣的驗證。請舉個例子。 – AlexS

+0

@AlexS一些示例將是必須限制在特定範圍內的值,或者必須始終小於另一個字段的一個字段。基本上,你可以用SQL約束來做任何事情。 – ecraig12345

+1

Greendao是爲了堅持和訪問您的數據在一個簡單的方式,是你的DAO層。驗證是業務邏輯的一部分,通常應在輸入或業務邏輯中以及數據持續前進行。 – AlexS

回答

0

你可以寫一個方法

boolean check(); 
在KEEP斷面

您在INSERT或UPDATE之前手動調用的實體的名稱。

2.

另一種可能性是延長greendao發生器的源代碼,以支持檢查:在property.java,你可以添加一個方法來Property.Builder

public Property.Builder check (String expr) { 
    property.checkConditon = expr; 
} 

當然,你會必須引入String checkCondition = "";並將其用於在dao模板中生成dao。

問題: 隨着greendao更改的新版本會丟失(但隨後又新版本可能已經包含這樣的功能)

第三種可能性是,將生成的CREATE TABLE語句,修改它以適應您的需求,並調用您的修改語句而不是原來的語句,或者刪除原始表並調用您的語句。

問題: 如果您的表格更改,您將不得不重複此操作。

+0

我不知道這是如何幫助任何東西,除非它從某個地方自動調用? – ecraig12345

+0

恐怕,您現在必須自己打電話給他。 – AlexS

+0

接下來沒用 - 然後不得不周期性地手動調用某種驗證方法,而不是驗證setters(或數據庫更新)中的數據不是設計事物的好方法。 – ecraig12345