1
我試圖使用GreenDAO爲to-many relation between Users and Articles
建模,其中一個User has many Articles
。默認情況下,GreenDao外鍵設置爲空ToMany關係
參考:GreenDAO Documentation on Relations
我GreenDAO的生成代碼如下:
Schema schema = new Schema(1, "com.example.greendao.models");
schema.enableKeepSectionsByDefault();
schema.setDefaultJavaPackageDao("com.example.greendao.dao");
Entity user = schema.addEntity("User");
user.addIdProperty().primaryKey();
user.addStringProperty("name");
Entity article = schema.addEntity("Article");
article.addIdProperty().primaryKey().autoincrement();
article.addStringProperty("title");
article.addStringProperty("content");
Property userId = article.addLongProperty("userId").notNull().getProperty();
ToMany userToArticles = user.addToMany(article, userId);
userToArticles.setName("articles");
new DaoGenerator().generateAll(schema, "app/src/main/java");
接下來,我通過Retrofit
取Users
和Articles
和使用GSON
將其轉換爲List<User>
Sampl ËHTTP API響應
[
{
"id": 1,
"name": "Example Name 1",
"articles": [
{
"id": 2,
"title": "Example Title 2",
"content": "Example Content 2"
},
{
"id": 10,
"title": "Example Title 10",
"content": "Example Content 10"
}
]
},
{
"id": 2,
"name": "Example Name 2",
"articles": [
{
"id": 111,
"title": "Example Title 111",
"content": "Example Content 111"
}
]
}
]
轉換後,我得到一個List<User>
對象,其中第一用戶的狀態是:
- ID:1
- 名稱:實例名稱1
- 文章:
- id:2
- 標題:實施例名稱2
- 含量:實施例內容2
- 用戶名:空
- ID:2
- 標題:實施例名稱2
- 含量:實施例內容2
- userId:null
-
第一篇文章
-
第二製品
,這裏是我如何將我的用戶和文章
daoSession.runInTx(new Runnable() {
@Override
public void run() {
for (User user : users) {
userDao.insertOrReplaceInTx(user);
articleDao.insertOrReplaceInTx(user.articles());
}
}
});
問題:
當用戶獲取使用UserDao
,和文章檢索使用getArticles()
方法,正確的文章檢索,但第字段爲空(這是有道理的,因爲用戶id爲空的話)
有沒有一種方式,當在ArticlesDAO
物品插入,userId
值可以自動設置爲用戶的ID,而不是手動設置它每次在代碼中的userId?
注意外鍵約束已設置已經