首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多对多和GreenDao 3.1.0 -安卓

使用多对多和GreenDao 3.1.0 -安卓
EN

Stack Overflow用户
提问于 2016-08-17 22:33:49
回答 1查看 663关注 0票数 2

我有两个实体Mood,MoodNote,它们都是我从webservice上得到的1个json列表。

Json示例:

代码语言:javascript
复制
{  
  "id":1,
  "name":"Sad",
  "created_at":"2016-08-11 19:59:43",
  "updated_at":"2016-08-16 20:15:17",
  "deleted_at":null,
  "symbol":"\\uD83D\\uDE22",
  "notes":[
    {  
      "id":409,
      "content":"Recusandae necessitatibus numquam consectetur ut.",
      "created_at":"2016-08-11 20:01:18",
      "updated_at":"2016-08-11 20:01:18",
      "deleted_at":null,
      "count":0,
      "pivot":{  
        "id_mood":1,
        "id_modenote":409,
        "created_at":"2016-08-11 20:01:19",
        "updated_at":"2016-08-11 20:01:19"
      }
    },
    {  
      "id":269,
      "content":"Nulla laudantiums quia impedit.",
      "created_at":"2016-08-11 20:01:18",
      "updated_at":"2016-08-11 20:01:18",
      "deleted_at":null,
      "count":0,
      "pivot":{  
        "id_mood":1,
        "id_modenote":269,
        "created_at":"2016-08-11 20:01:19",
        "updated_at":"2016-08-11 20:01:19"
      }
    },
    {  
      "id":204,
      "content":"Incidunt doloremque",
      "created_at":"2016-08-11 20:01:18",
      "updated_at":"2016-08-11 20:01:18",
      "deleted_at":null,
      "count":0,
      "pivot":{  
        "id_mood":1,
        "id_modenote":204,
        "created_at":"2016-08-11 20:01:19",
        "updated_at":"2016-08-11 20:01:19"
      }
    },
  ]
}

它们之间的关系是多对多的。

下面是entities类:

代码语言:javascript
复制
@Entity
public class Mood {
    @Id
    @SerializedName("id")
    @Expose
    private Long id;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("created_at")
    @Expose
    private String createdAt;
    @SerializedName("updated_at")
    @Expose
    private String updatedAt;
    @SerializedName("deleted_at")
    @Expose
    private String deletedAt;
    @SerializedName("symbol")
    @Expose
    private String symbol;

    @ToMany
    @JoinEntity(
            entity = JoinMoodNote.class,
            sourceProperty = "moodId",
            targetProperty = "moodNoteId"
    )
    @SerializedName("notes")
    @Expose
    private List<MoodNote> notes = new ArrayList<>();

}

情绪注释:

代码语言:javascript
复制
@Entity
public class MoodNote {
    @Id
    @SerializedName("id")
    @Expose
    private Long id;
    @SerializedName("content")
    @Expose
    private String content;
    @SerializedName("created_at")
    @Expose
    private String createdAt;
    @SerializedName("updated_at")
    @Expose
    private String updatedAt;
    @SerializedName("deleted_at")
    @Expose
    private String deletedAt;
    @SerializedName("count")
    @Expose
    private int count;
}

this tutorial : LINK中,他们提到要这样做

代码语言:javascript
复制
@Entity
public class JoinMoodNote {
    @Id private Long id;
    private Long moodId;
    private Long moodNoteId;
}

在那之后,他们没有提到如何设置或获取数据

我需要任何ManyToMany的例子或它的用法提示。

我试着用翻新获得情绪,我得到了情绪列表。

代码语言:javascript
复制
// This only insert the moods, it doesnt insert the MoodNote list
moodDao.insertTx(moods);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-25 05:34:41

我已经通过手动将记录添加到数据库中解决了这个问题:

代码语言:javascript
复制
moodDao.insertInTx(moodsList); // inserting all moods 
daoSession.runInTx(new Runnable() {
    @Override
    public void run() {
        // Foreach mood get the moodNotesList and add it to database
        for (Mood mood : moodsList) {
            long moodId = mood.getId();
            for (MoodNote note : mood.getMoodNotes()) {
                note.setMoodId(moodId); // nothing but set the moodId of the MoodNote to keep the relation
                moodNoteDao.insert(note); // insert the moodNote to database one by one
            }
        }
    }
});

这不是完美的解决方案,但它解决了我的问题。

如果我找到了更好的解决方案,我会把它贴回这里,如果你有更好的解决方案,请贴出来作为答案,这样我们就可以学习它了。

谢谢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38999573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档