【问题标题】:Primary key does not exist in the entity in android room with composite key具有复合键的android房间中的实体中不存在主键
【发布时间】:2019-05-12 19:01:03
【问题描述】:

我得到的错误是:

错误:主键中引用的theme_id、picture_id在Entity中不存在。可用列名: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();
}

【问题讨论】:

标签: android database primary-key android-room composite-primary-key


【解决方案1】:

您收到此错误,因为您尚未创建名为 theme_id, picture_id 的列。可能您的意思是有 2 个主键 theme_idpicture_id。然后你必须传递两个用逗号分隔的字符串,而不是一个带逗号的字符串。

所以改变

{"theme_id, picture_id"}
 "  only one string   "

{"theme_id", "picture_id"}
 " first  ", "  second  "
 " string "  "  string  "

它应该可以正常工作。

【讨论】:

  • 嘿,非常感谢您的回答。我不知道我怎么忽略了这一点。
  • 只是想说我还没有实际测试过你的修复。我只是假设它会起作用。我让它与那里的公共 staic final int 字段一起工作。但实际上是相同的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 2021-04-24
  • 2013-08-26
  • 2013-12-24
  • 2018-10-19
  • 2011-11-05
  • 1970-01-01
相关资源
最近更新 更多