ForeignKey в комнате базы данных - PullRequest
0 голосов
/ 27 сентября 2018

Я работаю над структурой, в которой есть несколько статей, а ее содержимое хранится в двух разных таблицах

Первая - это таблица статей, которая содержит основную информацию, как показано ниже:

@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";

}

ВтораяТаблица 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;

}

Я хочу выполнить запрос Inner Join, который также предоставляет мне FilesData с некоторыми столбцами из статей (например:is_favorite) Для этого я попытался связать обе таблицы с article_id, используя ограничение ForeignKey, как указано в таблице FilesData.

Вот третий класс @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

или Не удалось выполнить ограничение FOREIGN KEY

Любые предложения .. ??

1 Ответ

0 голосов
/ 27 сентября 2018

вы ввели неправильный 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...