1. 程式人生 > >greendao 3.0版本踩坑

greendao 3.0版本踩坑

最近公司專案需要使用greendao儲存本地資料庫

遇到了一些問題記錄一下,主要是一對多表關聯查不出子表資料問題。

greendao使用相信大家網上一搜大量教你試用文章所以前面就不記錄了。

貼幾個標籤

@Id 標明主鍵 @NotNull 非空

@Unique 新增唯一約束    (一般外來鍵關聯字表使用)

@JoinProperty 對於更復雜的關係,可以使用這個註解標明目標屬性的源屬性

@Property:設定一個非預設關係對映所對應的列名,預設是的使用欄位名 舉例:@Property (nameInDb="name")

@ToMany:表示一對多屬性

坑一:有個坑就是在這裡,由於我沒有設定@Property

這個屬性,自動生成的Dao會把你的外來鍵自動轉換為大寫,如:

主表:

字表:

而,我關聯字表設定為

user_id 為小寫,導致查不到字表資訊。

然後一對多關聯,我覺得好理解的就是用主表外來鍵來關聯,如:

主表:User 使用者表    字表:Order 訂單表

User表有 id,user_id,name... //一對多關聯 @ToMany(joinProperties = {@JoinProperty(name = "user_id",referencedName = "user_id")}) public List<Order> orderList;

Order表有 id,name,user_id

...

通過user_id外來鍵關聯,即,使用父表user_id來關聯。

坑二

當修改外來鍵由Long型別改為String型別時,老是提示

Please either mark it with @Keep annotation instead [email protected]

這是由於主鍵唯一性

修改就是把自動生成的dao刪掉,get,set方法刪掉,重新生成。

坑三

列印時候不顯示關聯字表資訊,如

列印時候只顯示users資訊沒有order資訊,第一次建立搜尋是可以顯示的,退出應用後,再去查絢就沒有字表資訊了,匯出db顯示時存在user_id關聯的。糾結了好久後來列印order資訊,發現是存在的

所以放心使用。

坑四

這完全是我不細心導致,

user_id是個隨機數,下面order表應該也遍歷賦值

ok,簡單記錄一下