我正在尝试从Android Room数据库中获取Pojo,就像我为另一个对象所做的那样,但是我得到以下错误代码:
错误:查询存在问题:[SQLITE_ERROR] SQL错误或缺少数据库(无此类列:e_item_type_id)
ItemEntity
@Entity(tableName = "items",
foreignKeys ={
@ForeignKey(
entity = ItemTypeEntity.class,
parentColumns = "e_item_type_id", // remote class
childColumns = "item_type_id" // local class
)
}
,
indices = {
@Index(value = {"item_type_id"})
})
public class ItemEntity extends BaseEntity implements Item {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "e_item_id")
private Integer id = null;
@ColumnInfo(name = "item_type_id")
private int itemTypeId;
public int getItemTypeId() {
return itemTypeId;
}
public void setItemTypeId(int itemTypeId) {
this.itemTypeId = itemTypeId;
}
@Override
public Integer getId() {
return id;
}
public void setId(Integer id){ this.id = id;}
}
ItemTypeEntity
@Entity(tableName = "itemTypes")
public class ItemTypeEntity extends BaseEntity {
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "e_item_type_id")
private Integer id = null;
@ColumnInfo(name = "item_type_name")
private String name;
@Ignore
public ItemTypeEntity(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
Pojo ItemWithType
public class ItemWithType {
@Embedded
public ItemEntity item;
@Embedded
public ItemTypeEntity itemType;
}
ItemDao
@Dao
public abstract class ItemDao {
@Transaction
@Query("SELECT * "FROM " + "items )
public abstract List<ItemWithType> getAll();
}
这与另一个Pojo很好地配合,因为关系是自动完成的。
我也有以下警告:
ch.pa.oceanspolluters.app.database.pojo.ItemWithType具有一些字段[e_item_type_id,item_type_name],查询未返回这些字段。如果不应从结果中读取它们,则可以使用@Ignore批注对其进行标记。您可以通过使用@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)注释该方法来禁止显示此警告。查询返回的列:e_item_id,container_id,weight_kg,item_type_id。 ch.pa.oceanspolluters.app.database.pojo.ItemWithType中的字段:e_item_id,container_id,weight_kg,item_type_id,e_item_type_id,item_type_name。