【问题标题】:Get all correct values from query, except for id从查询中获取所有正确的值,除了 id
【发布时间】: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


    【解决方案1】:

    如果您不使用 2.5.0 或更高版本的 Room 库,请尝试更改以使用它们(如果有任何高于 2.5.0 的)。

    不明确的列名存在问题(如果输出中存在相同的列)。最后一个相同命名列的值将应用于较早的值。 2.5.0 应该解决这个问题。

    仅当您使用 JOINS 而不是方便的 @Relation 时才会出现此问题(使用此替代方法,在使用 @Relation 时 JOIN 是通过子查询模拟的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 2021-06-02
      • 2020-09-22
      相关资源
      最近更新 更多