房间数据库中的外键
ForeignKey in Room Database
我正在处理一个结构,其中有几篇文章及其内容存储在两个不同的 tables
首先是文章 table,其中包含如下基本信息:
@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";
}
第二个 table 是 FileData,其中包含该文章的内容(文件数据),如下所示
@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 以及文章中的一些列(例如:is_favorite)
为此,我尝试使用 FilesData table 中提到的外键约束将 table 与 article_id 相关联。
这是第三个@Embedded class
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
或FOREIGN KEY约束失败
有什么建议..??
您输入了错误的parentColumn
只需更改此
@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;
我正在处理一个结构,其中有几篇文章及其内容存储在两个不同的 tables
首先是文章 table,其中包含如下基本信息:
@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";
}
第二个 table 是 FileData,其中包含该文章的内容(文件数据),如下所示
@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 以及文章中的一些列(例如:is_favorite) 为此,我尝试使用 FilesData table 中提到的外键约束将 table 与 article_id 相关联。
这是第三个@Embedded class
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
或FOREIGN KEY约束失败
有什么建议..??
您输入了错误的parentColumn
只需更改此
@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;