所以我想在 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.idSimpan
和 tibadah.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/