Первичный ключ не существует в объекте в комнате Android с составным ключом - PullRequest
0 голосов
/ 11 декабря 2018

Ошибка, которую я получаю:

error: theme_id, ссылка на picture_id в первичном ключе не существует в сущности.Доступные имена столбцов: theme_id, picture_id, image

Я много смотрел в Интернете, но ничего не могу найти по этому поводу.Эта ошибка появляется только при попытке использовать составной ключ.Если я аннотирую одно из полей обычным ключом PrimaryKey, оно будет работать нормально.Я не понимаю, что здесь происходит, и это расстраивает, что я не могу найти в Интернете ничего об этом.Я надеюсь, что вы, ребята, сможете мне помочь.

Сущность

@Entity(primaryKeys = {"theme_id, picture_id"}, tableName = "picture")
public class Picture {

    @ColumnInfo(name = "theme_id")
    private int themeId;
    @ColumnInfo(name = "picture_id")
    private int pictureId;
    @ColumnInfo(name = "image", typeAffinity = ColumnInfo.BLOB)
    private byte[] image;
}

Дао

@Dao
public interface PictureDao {

    @Insert
    void instertPictures(Picture... pictures);

    @Update
    void updatePictures(Picture... pictures);

    @Delete
    void deletePictures(Picture... pictures);

    @Query("SELECT * FROM picture")
    List<Picture> getAllPictures();

    @Query("SELECT * FROM picture WHERE theme_id = :themeId")
    List<Picture> getThemePictures(int themeId);

    @Query("SELECT * FROM picture WHERE theme_id = :themeId AND picture_id = :pictureId")
    Picture getPicture(int themeId, int pictureId);

}

База данных

@Database(entities = {Picture.class}, version = 1, exportSchema = false)
public abstract class PictureDatabase extends RoomDatabase {

    public static final String NAME = "picture_db";

    public abstract PictureDao pictureDao();
}

1 Ответ

0 голосов
/ 11 декабря 2018

Вы получаете эту ошибку, потому что вы не создали столбец с именем theme_id, picture_id.Возможно, вы хотели иметь 2 первичных ключа theme_id и picture_id.Затем вы должны передать две строки, разделенные запятой, а не одну с запятой внутри.Так что измените {"theme_id, picture_id"} на {"theme_id", "picture_id"}, и все должно работать нормально.

...