Вставить в комнате / Android - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь получить Pojo из базы данных Android Room, как и для другого объекта, но я получаю следующий код ошибки:

ошибка: проблема с запросом: [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.

...