java - Android 房间错误 : The columns returned by the query does not have the fields even though they are annotated as non-null or primitive

标签 java android android-room

所以我想在 Android Studio 中使用 Room 加入我的 table ,这是我的模型类。

Ibadah.java

@Entity(tableName = "tibadah")
public class Ibadah implements Serializable {

    @PrimaryKey(autoGenerate = true)
    public int idIbadah;

    @ColumnInfo(name = "nama_ibadah")
    public String namaIbadah;

    @ColumnInfo(name = "deskripsi_ibadah")
    public String deskripsiIbadah;

    @ColumnInfo(name = "satuan_ibadah")
    public String satuanIbadah;

    public String getSatuanIbadah() {
        return satuanIbadah;
    }

    public void setSatuanIbadah(String satuanIbadah) {
        this.satuanIbadah = satuanIbadah;
    }

    public String getDeskripsiIbadah() {
        return deskripsiIbadah;
    }

    public void setDeskripsiIbadah(String deskripsiIbadah) {
        this.deskripsiIbadah = deskripsiIbadah;
    }

    public int getIdIbadah() {
        return idIbadah;
    }

    public void setIdIbadah(int idIbadah) {
        this.idIbadah = idIbadah;
    }

    public String getNamaIbadah() {
        return namaIbadah;
    }

    public void setNamaIbadah(String namaIbadah) {
        this.namaIbadah = namaIbadah;
    }

}

SimpanTarget.java

@Entity(tableName = "tabjoin")

public class SimpanTarget implements Serializable {

    @PrimaryKey(autoGenerate = true)
    public int idSimpan;

    @ColumnInfo(name = "id_ibajoin")
    public int idIbadahJoin;

    @ColumnInfo(name = "id_periode")
    public int idPeriode;

    @ColumnInfo(name = "id_target")
    public int idTarget;

    @ColumnInfo(name = "id_catat")
    public int idCatat;

    @ColumnInfo(name = "id_lapor")
    public int idLapor;

    @ColumnInfo(name = "id_satuan")
    public int idSatuan;

    @ColumnInfo(name = "nama_ibadah")
    public String namaIbadah;

    @ColumnInfo(name = "satuan_ibadah")
    public String satuanIbadah;

    @ColumnInfo(name = "target_ibadah")
    public boolean targetIbadah;

    @ColumnInfo(name = "catat_ibadah")
    public boolean catatIbadah;

    @ColumnInfo(name = "lapor_ibadah")
    public boolean laporIbadah;

    @ColumnInfo(name = "et_target")
    public String etTarget;

    @ColumnInfo(name = "et_capaian")
    public String etCapaian;

    @ColumnInfo(name = "status")
    public boolean status;

    public int getIdSimpan() {
        return idSimpan;
    }

    public void setIdSimpan(int idSimpan) {
        this.idSimpan = idSimpan;
    }

    public int getIdIbadahJoin() {
        return idIbadahJoin;
    }

    public void setIdIbadahJoin(int idIbadahJoin) {
        this.idIbadahJoin = idIbadahJoin;
    }

    public int getIdPeriode() {
        return idPeriode;
    }

    public void setIdPeriode(int idPeriode) {
        this.idPeriode = idPeriode;
    }

    public int getIdTarget() {
        return idTarget;
    }

    public void setIdTarget(int idTarget) {
        this.idTarget = idTarget;
    }

    public int getIdCatat() {
        return idCatat;
    }

    public void setIdCatat(int idCatat) {
        this.idCatat = idCatat;
    }

    public int getIdLapor() {
        return idLapor;
    }

    public void setIdLapor(int idLapor) {
        this.idLapor = idLapor;
    }

    public int getIdSatuan() {
        return idSatuan;
    }

    public void setIdSatuan(int idSatuan) {
        this.idSatuan = idSatuan;
    }

    public boolean isTargetIbadah() {
        return targetIbadah;
    }

    public void setTargetIbadah(boolean targetIbadah) {
        this.targetIbadah = targetIbadah;
    }

    public boolean isCatatIbadah() {
        return catatIbadah;
    }

    public void setCatatIbadah(boolean catatIbadah) {
        this.catatIbadah = catatIbadah;
    }

    public boolean isLaporIbadah() {
        return laporIbadah;
    }

    public void setLaporIbadah(boolean laporIbadah) {
        this.laporIbadah = laporIbadah;
    }

    public String getEtTarget() {
        return etTarget;
    }

    public void setEtTarget(String etTarget) {
        this.etTarget = etTarget;
    }

    public String getEtCapaian() {
        return etCapaian;
    }

    public void setEtCapaian(String etCapaian) {
        this.etCapaian = etCapaian;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public String getNamaIbadah() {
        return namaIbadah;
    }

    public void setNamaIbadah(String namaIbadah) {
        this.namaIbadah = namaIbadah;
    }

    public String getSatuanIbadah() {
        return satuanIbadah;
    }

    public void setSatuanIbadah(String satuanIbadah) {
        this.satuanIbadah = satuanIbadah;
    }
}

IbadahDAO.java

@Dao
public interface IbadahDAO {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertIbadah (Ibadah ibadah);

    @Update
    int updateIbadah (Ibadah ibadah);

    @Delete
    int deleteIbadah (Ibadah ibadah);

    @Insert (onConflict = OnConflictStrategy.REPLACE)
    long insertTarget (Ibadah ibadah);

    @Insert (onConflict = OnConflictStrategy.REPLACE)
    long insertCapai (Ibadah ibadah);

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertNamaTarget (NamaTarget namaTarget);

    @Update
    int updateNamaTarget (NamaTarget namaTarget);

    @Delete
    int deleteNamaTarget (NamaTarget namaTarget);

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertIbadah (NamaTarget namaTarget);

    @Update
    int updateIbadah (NamaTarget namaTarget);

    @Insert (onConflict = OnConflictStrategy.REPLACE)
    long insertTarget (NamaTarget namaTarget);

    @Insert (onConflict = OnConflictStrategy.REPLACE)
    long insertCapai (NamaTarget namaTarget);

    @Insert (onConflict = OnConflictStrategy.REPLACE)
    long insertDataTarget (SimpanTarget simpanTarget);

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertIbadah (SimpanTarget simpanTarget);

    @Update
    int updateIbadah (SimpanTarget simpanTarget);

    @Query("SELECT * FROM ttarget WHERE nama_target = nama_target")
    NamaTarget[] selectAllNamaTargets();

    @Query("SELECT * FROM tibadah")
    Ibadah[] selectAllStatus();

    @Query("SELECT * FROM tibadah")
    Ibadah[] selectAllIbadahs();

    @Query("SELECT * FROM tibadah WHERE idIbadah = :id LIMIT 1")
    Ibadah selectIbadahDetail(int id);

    @Query("SELECT * FROM ttarget WHERE idTarget = :id LIMIT 1")
    NamaTarget selectPeriodeDetail(int id);

    @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
    @Query("SELECT tabjoin.idSimpan, tibadah.nama_ibadah " +
            "FROM tabjoin, tibadah " +
            "WHERE tabjoin.id_ibajoin = tibadah.nama_ibadah ")
    SimpanTarget[] selectAllIbadahJoin();
}

所以我的问题是我什么时候想使用这段代码加入那个表

@Query("SELECT tabjoin.idSimpan, tibadah.nama_ibadah " + "FROM tabjoin, tibadah " + "WHERE tabjoin.id_ibadah = tibadah.nama_ibadah ")

SimpanTarget[] selectAllIbadahJoin();

然后它显示这个错误

error: The columns returned by the query does not have the fields [idIbadah,idPeriode,idTarget,idCatat,idLapor,idSatuan,targetIbadah,catatIbadah,laporIbadah,status] in skripsi.com.ggr.managementibadah.model.SimpanTarget even though they are annotated as non-null or primitive.

Columns returned by the query: [idSimpan,nama_ibadah]

我觉得显示错误是因为我没有关联我的表格?真的吗?如果不是如何解决该错误?我希望你可以帮助我。 非常感谢,抱歉我的英语不好。

最佳答案

与关系无关。错误消息基本上是这样说的:在您的查询中,您只选择了 tabjoin.idSimpantibadah.nama_ibadah;并且您正在尝试返回类型为 SimpanTarget 的数组。这两个字段不足以创建 SimpanTarget 实例。您应该选择整个字段集。例如:SELECT tabjoin.*

关于java - Android 房间错误 : The columns returned by the query does not have the fields even though they are annotated as non-null or primitive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55215304/

相关文章:

android - 滑动抽屉 Android

javascript - 无法在 Android 设备上运行 React-Native 示例代码

android - 房间数据库独特的值(value)

android - 在带有 Kotlin 协程的 Room DAO 中使用 Deferred<...>

Java 应用程序执行速度非常慢(比 Windows、Linux、AIX 慢 10-100 倍)

java - 扫描器和 for 循环

java - 处理解析器生成器中的迭代计数字段

android - 禁用 EditText 中的滚动选项

android - 使用 android room 持久性库在对象内插入对象

java - 修复 Tic-Tac-Toe Minimax ai