Хорошо, теперь я представлю свой подход, как это реализовано.
Это сущности:
@Entity(tableName = "groups",
indices = {@Index(value = {"id"}, unique = true)})
public class Group {
@PrimaryKey(autoGenerate = true)
public int id;
public String name;
}
@Entity(tableName = "member",
indices = {@Index(value = {"id"}, unique = true)},
foreignKeys = {@ForeignKey(
entity = Group.class,
parentColumns = "id",
childColumns = "groupId",
onUpdate = CASCADE, onDelete = CASCADE)})
public class Member {
@PrimaryKey(autoGenerate = true)
public int id;
public String name;
public int groupId;
public void setGroupId(int groupId){
this.groupId = groupId;
}
}
Когда у вас уже есть ваши сущности, вы должны создать Отношения между ними. Я делаю это с помощью одного дополнительного класса, который расширяет Group @Entity class
и содержит список с членами List<Member>
.
public class GroupWithMembsers extends Group {
@Relation(parentColumn = "id", entityColumn = "groupId", entity = Member.class)
private List<Member> members;
public List<Member> getMembers(){
return this.members;
}
}
Теперь, когда у вас есть все группы и все участники, вы должны установить идентификатор группы всех участников. И теперь вы можете вставить все данные в базу данных следующим образом:
@Dao
public abstract class GroupDao {
@Transaction
public void insertGroupWithMembsers(List<GroupWithMembsers> groupWithMembsers, RulesOfGolfDatabase database) {
if (groupWithMembsers != null && database != null) {
//First have to insert the entities which holds the @Relation
insertGroups(groupWithMembsers);
for (GroupWithMembsers group : groupWithMembsers) {
//Now you can insert members, because thier foreignKeys (groupId) is already inserted into the Database
database.memberDao().insertMembers(groupWithMembsers.getMembers());
}
}
}
}
Если у вас есть какие-либо вопросы, просто спросите.
Надеюсь, я как-то помог:)