java多对多关联数据操作_如何使用Room for Android实现与关联中的其他数据的多对多关系?...

我找到了使用Room为Android实现多对多关系的示例 . 然而,它们都很简单,涉及仅具有关联实体的标识符的关联表,因此仅返回任一实体的对象列表 . 如果有关联的数据,我该如何迎合它?

例如,对于主题和学生协会,如果我想在关联中有一个“结果”条目,以便每个学生对一个主题有1个结果,那怎么办?实体将是“主题”,“学生”,“结果”,其中结果表提供关联 . 只需要1个连接查询就可以获得单个主题的所有学生成绩,但它是什么,以及DAO方法应该为它返回什么类型?请参阅下面代码的结尾 . 否则,会出现Room需要2个查询 .

@Entity(tableName="students")

public class Student

{

@PrimaryKey(autoGenerate = true)

@ColumnInfo(name = "studentId")

private int studentId;

@ColumnInfo(name = "studentName")

private String studentName;

}

@Entity(tableName="subjects")

public class Subject

{

@PrimaryKey(autoGenerate = true)

@ColumnInfo(name = "subjectId")

private int id;

@ColumnInfo(name = "title")

private String title;

}

@Entity(tableName = "results",

primaryKeys = { "subjectId", "studentId" },

foreignKeys = {

@ForeignKey(entity = Subject.class, parentColumns = "subjectId",

childColumns = "subjectId", onDelete = ForeignKey.CASCADE),

@ForeignKey(entity = Student.class, parentColumns = "studentId",

childColumns = "studentId", onDelete = ForeignKey.CASCADE)}

)

public class Result

{

int subjectId;

int studentId;

@ColumnInfo(name = "result")

int result;

}

@Dao

public interface SubjectDAO

{

@Query("SELECT * FROM subjects")

LiveData> getAllSubjects ();

}

@Dao

public interface StudentDAO

{

@Query("SELECT * FROM students")

LiveData> getAllStudents ();

}

@Dao

public interface ResultDAO

{

@Query("SELECT * FROM students INNER JOIN results ON students.studentId=results.studentId WHERE results.subjectId=:subjectId")

LiveData> getStudentsForSubject (int subjectId);

@Query("SELECT * FROM subjects INNER JOIN results ON subjects.subjectId=results.subjectId WHERE results.studentId=:studentId")

LiveData> getSubjectsForStudent (int studentId);

/* Only 1 query should be needed, and what is the something returned?

Don't want it to just be "Result"

because that means another query would be used with the same association in order to get the Student data. */

@Query("SELECT ????????????????")

LiveData> getStudentResultsForSubject (int subjectId)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值