Работа со многими ко многим и GreenDao 3.1.0 - Android
У меня есть 2 сущности Mood, MoodNote, и я получаю их из веб-сервиса в виде списка 1 json.
Образец Json:
{
"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"
}
},
]
}
Отношение между ними много ко многим.
Теперь это классы сущностей:
@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<>();
}
Примечание настроения:
@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;
}
И в этом уроке: ССЫЛКА, они упоминали, чтобы делать так
@Entity
public class JoinMoodNote {
@Id private Long id;
private Long moodId;
private Long moodNoteId;
}
после этого они не упоминали, как установить или получить данные
Мне нужен любой пример ManyToMany или намек на его использование.
Я пытался получить настроение с помощью модернизации, и я получил список настроений
// This only insert the moods, it doesnt insert the MoodNote list
moodDao.insertTx(moods);
1 ответ
Решение
Я решил проблему, добавив записи в базу данных вручную:
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
}
}
}
});
Это не идеальное решение, но оно решило мою проблему.
Если я найду лучшее решение, я опубликую его здесь, если у вас есть лучшее решение, пожалуйста, напишите в качестве ответа, чтобы мы его изучили.
Спасибо.