我具有一对多关系的数据库表,因为我现在只想获取在CClass
表中至少包含一条匹配记录的记录。
这是我的PojoClass,其中我定义了两者之间的关系
public class PojoClass {
@Embedded
PClass pClass;
@Relation(
parentColumn = "cid",
entityColumn = "cid",
entity = CClass.class)
List<CClass> cClassList;
}
PClass.java
@Entity(tableName = "p_class")
public class PClass {
@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "cid")
private long cid;
@ColumnInfo(name = "rid")
private String rid;
}
CClass.java
@Entity(tableName = "c_class",
foreignKeys = @ForeignKey(entity = PClass.class,
parentColumns = "cid",
childColumns = "cid",
onDelete = ForeignKey.CASCADE))
public class CClass {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name="cid")
@NonNull
private long cid;
@ColumnInfo(name = "rid")
private long rid;
}
还有道
@Dao
public abstract class ClassDao {
@Query("SELECT * FROM PClass")
public abstract Single<List<PojoClass>> getAll();
}
此代码运行良好,但我想忽略CClass
中没有匹配原始文件的原始文件。现在,ClassDao#getAll()
在没有数据但我想完全忽略PojoClass#List<CClass> cClassList
中的记录时,为'ClassDao#getAll()
字段返回空列表
答案 0 :(得分:0)
首先,您应该正确命名id变量。 id变量可以简单地是 id ,它是主键,而 id 之外的其他东西,例如 c_id ,它是外键。
因此,将您的PClass.java
修改为:
@Entity(tableName = "p_class")
public class PClass {
@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "id")
private long id;
@ColumnInfo(name = "rid")
private String rid;
}
并且由于您告诉您从PClass
到CClass
有一对多的关系,所以我猜{{1中应该有对PCLass
的ID的引用}}。因此,您的CClass
应该如下所示:
CClass.java
我不知道@Entity(tableName = "c_class",
foreignKeys = @ForeignKey(entity = PClass.class,
parentColumns = "id",
childColumns = "pid",
onDelete = ForeignKey.CASCADE))
public class CClass {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name="id")
@NonNull
private long id;
@ColumnInfo(name = "rid")
private long rid;
@ColumnInfo(name = "pid")
private long pid;
}
是什么。
现在,获取代表rid
的资源,该资源具有您关注的 pid :
CClass
然后,您将能够调用此DAO函数并获取您所关注的PClass ID的CClass。如果您使用实际模型的名称而不是此PClass和CClass,将会容易得多。
另一件事,恕我直言,DAO应该是界面,而不是抽象类