今天,当我在Android中学习Room时,有一个问题出现了。
一切都好,但我不能查询两个表之间的位置。
以下是我的代码:
............................................... .................................................. .................................................. ...
此代码效果很好
@Query("select users.id,users.name from users where score > :score and assist > :assist")
List<UserSimple> getUserWithLimits(int score,int assist);
但是后面的人什么都得不到:
@Query("select users.id,users.name from users,performs where users.id = performs.id and performs.score > :score and performs.assist > :assist")
List<UserSimple> getUserWithLimits(int score,int assist);
这是我使用Room创建的表格: .................................................. .................................................. .................................................. .. 用户表:
@Entity(tableName = "users",
primaryKeys = {"id", "name"},
indices = {
@Index(value = "id", unique = true)
})
public class User {
@android.support.annotation.NonNull
@ColumnInfo(name = "id")
private String id;
@android.support.annotation.NonNull
@ColumnInfo(name = "name")
private String name;
@ColumnInfo(name = "position")
private String position;
@Embedded
private UserPerforms performs;
@Ignore
public User() {
}
public User(String id, String name, String position, UserPerforms performs) {
this.id = id;
this.name = name;
this.position = position;
this.performs = performs;
}
getters/setters/toString()...
}
............................................... .................................................. .................................................. ..... 执行表:
@Entity(tableName = "performs",
primaryKeys = "p_id",
foreignKeys = @ForeignKey(entity = User.class
, parentColumns = "id"
, childColumns = "p_id")) //定义主键
public class UserPerforms {
@android.support.annotation.NonNull //
@ColumnInfo(name = "p_id")
private String p_id;
@ColumnInfo(name = "score")
private int score;
@ColumnInfo(name = "assist")
private int assist;
@Ignore
public UserPerforms() {
}
public UserPerforms(String p_id, int score, int assist) {
this.p_id = p_id;
this.score = score;
this.assist = assist;
}
...getters/setters/toString()..
}
............................................... .................................................. .................................................. ..... userSimple类:
public class UserSimple {
@ColumnInfo(name = "id")
private String id;
@ColumnInfo(name = "name")
private String name;
...getters/setters/toString()
public UserSimple(String id, String name) {
this.id = id;
this.name = name;
}
}
任何人都可以帮助我吗?先谢谢。
答案 0 :(得分:0)
您正在加入错误的列。 perform表中的id列是p_id,而不是id。试试这个:
@Query("select users.id,users.name from users,performs where users.id = performs.p_id and performs.score > :score and performs.assist > :assist")