我當前正在嘗試使用包含(字節數組)屬性的where條件的查詢來選擇條目。這個屬性/列包含一個序列化的UUID。不幸的是,我目前無法更改此列的數據類型,因爲數據庫是由一個單獨的模塊創建和同步的,該模塊僅適用於當前的實現。由於greenDao無法正確處理字節數組作爲主鍵,我試圖以某種方式解決此問題。創建我自己的選擇查詢等將作爲 該物業greenDAO生成過程中所定義的解決方案:Android上的GreenDAO:字節數組作爲主鍵/構建包含字節數組屬性Where子句的查詢
Query query = this.mRandomEntityDao.queryBuilder().where(RandomEntityDao.Properties.RandomProperty.eq(randomByteArray)).build();
不幸的是我得到以下錯誤:
Entity randomEntity = schema.addEntity("RandomEntity");
...
randomEntity.addByteArrayProperty("RandomProperty");
的查詢使用以下行建與此操作:
de.greenrobot.dao.DaoException: Illegal value: found array, but simple object required
at de.greenrobot.dao.query.WhereCondition$PropertyCondition.checkValueForType(WhereCondition.java:75)
...
這是哪裏條件是根本不支持greenDAO或我缺少重要的東西?不幸的是,我不能使用這個特定屬性的另一個數據類型。
編輯:
我的當前的解決方法去如下:
如greenDao能處理主密鑰,其字符串(達到一定點)和UUID的還可以通過我改變了此數據類型表示現有的表,並添加下列:
db.execSQL("ALTER TABLE 'RANDOMTABLE' ADD COLUMN '_GREENID' TEXT;");
同步模塊忽略此列,因此不應該有與任何問題。然後,我創建了一個觸發映射系列化UUID在ID
列到新_GREENID
列:
db.execSQL("CREATE TRIGGER randomtableGreen AFTER INSERT ON 'RANDOMTABLE' BEGIN " +
"UPDATE 'RANDOMTABLE' SET '_GREENID' = HEX(NEW.ID) WHERE 'RANDOMTABLE'.ID = NEW.ID; " +
"END;");
最後,我運行他們已經創造觸發包含的對現有的一些項目的情況下,該表的更新:
db.execSQL("UPDATE 'RANDOMTABLE' SET '_GREENID' = HEX(ID) WHERE '_GREENID' <> '';");
你在這一列中存儲了什麼,每行約有多少字節?爲什麼你不能使用另一種數據類型? – AlexS
我已經正確更新了我的問題;) – AustrianDude