【发布时间】:2023-02-24 11:37:17
【问题描述】:
我创建了一个这样的实体(我删除了一些属性,但结构是一样的)。
@Entity(tableName = "circuits")
public class Circuit {
@PrimaryKey(autoGenerate = true)
private int id;
private String name;
public Circuit(int id, String name) {
this.id = id;
this.name = name;
}
@Ignore
public Circuit(String name) {
this.name = name;
}
@Ignore
public Circuit() {}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity(tableName = "circuit_sessions")
public class CircuitSession {
@PrimaryKey(autoGenerate = true)
private int id;
private int circuitId;
private int driverId;
public CircuitSession(int id, int circuitId, int driverId) {
this.id = id;
this.circuitId = circuitId;
this.driverId = driverId;
}
@Ignore
public CircuitSession(int circuitId, int driverId) {
this.circuitId = circuitId;
this.driverId = driverId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getCircuitId() {
return circuitId;
}
public void setCircuitId(int circuitId) {
this.circuitId = circuitId;
}
public int getDriverId() {
return driverId;
}
public void setDriverId(int driverId) {
this.driverId = driverId;
}
}
然后我在我的 DAO 中有一个这样的查询。
@Query("SELECT * FROM circuits INNER JOIN circuit_sessions ON circuits.id = circuit_sessions.circuitId WHERE circuit_sessions.driverId = :driverId ORDER BY name ASC")
LiveData<List<Circuit>> getCircuitsWithOwnSessions(int driverId);
当我调用此查询时,它会正确返回一个 Circuit 对象,它就是我期望的电路。但是当我使用该 Circuit 对象的 getId() 函数时,它返回 1 而不是 2,这是正确的电路 ID。所有其他属性都是正确的和预期的值。只是id错了。
当我检查 Android Studio 中的 App Inspection 并在那里运行查询时,它显示相同的电路并显示正确的 ID,即 2。
那么,当我在代码中调用查询时,什么会导致错误的 id?有没有办法确保我总是得到保存在数据库中的 ID?
【问题讨论】:
标签: android android-room