代码之家  ›  专栏  ›  技术社区  ›  Nir Patel

外键室内数据库

  •  0
  • Nir Patel  · 技术社区  · 7 年前

    我正在研究一个结构,其中有几个文章,其内容存储在两个不同的表中

    首先是Articles表,包含以下基本信息:

    @Entity(tableName = "Articles")
    public class ArticleModel implements Serializable {
    
        @SerializedName("iArticleID")
        @PrimaryKey(autoGenerate = true)
        public int articleId;
    
        @ColumnInfo(name = "disciplineId")
        public long disciplineID;
    
        @SerializedName("tTitle")
        @ColumnInfo(name = "tTitle")
        public String title;
    
        @SerializedName("file_path")
        @ColumnInfo(name = "article_path")
        public String articlePath;
    
        @ColumnInfo(name = "lastUpdated")
        public String lastUpdated;
    
        @ColumnInfo(name = "articleDescription")
        public String articleDescription;
    
        @ColumnInfo(name = "is_favorite")
        public String isFav = "false";
    
    }
    

    @Entity(foreignKeys = @ForeignKey(entity = FileData.class,
            parentColumns = "article_id",
            childColumns = "iArticleID",
            onDelete = CASCADE))
    public class FileData implements Serializable {
    
        @PrimaryKey(autoGenerate = true)
        private int fileId;
    
        @ColumnInfo(name = "file_name")
        private String fileName;
    
        @ColumnInfo(name = "file_path")
        private String filePath;
    
        @ColumnInfo(name = "content")
        private String content;
    
        @ColumnInfo(name = "article_id")
        public int aId;
    
    }
    

    为此,我尝试使用FilesData表中提到的ForeignKey约束将这两个表与article\ id关联起来。

    这里是第三个@Embedded类

    public class FilesWithArticlesData {
    
        @Embedded
        ArticleModel articleModel;
    
        @Embedded
        public FilesData files;
    
    }
    

     @Query("SELECT FilesData.fileId, FilesData.file_name, FilesData.file_path, FilesData.content,articles.is_favorite FROM files" +
                " INNER JOIN ARTICLES ON articles.articleId = FilesData.article_id  " +
                "WHERE FilesData.content LIKE :searchText")
        public LiveData<List<FilesWithArticlesData>> searchContent(String searchText);
    

    每当我尝试运行应用程序时,都会出错

    error: (iArticleID) referenced in the foreign key does not exists in the Entity. Available column names:fileId, file_name, file_path, content, article_id
    

    外键约束失败

    有什么建议吗。。??

    1 回复  |  直到 7 年前
        1
  •  3
  •   Ali Ahmed    7 年前

    您输入了错误的父列

    改变一下这个

    @Entity(foreignKeys = @ForeignKey(entity = ArticleModel.class,
            parentColumns = "iArticleID",
            childColumns = "article_id",
            onDelete = CASCADE))
    

    而不是

    @Entity(foreignKeys = @ForeignKey(entity = FileData.class,
            parentColumns = "article_id",
            childColumns = "iArticleID",
            onDelete = CASCADE))
    

    同时也改变了这一点

     @SerializedName("iArticleID")
        @PrimaryKey(autoGenerate = true)
        public int articleId;
    

     @ColumnInfo(name = "iArticleID")
        @PrimaryKey(autoGenerate = true)
        public int articleId;