Я использую комнату для операций с базой данных. У меня есть класс TableQuestion, который содержит строку и идентификатор, и у меня есть класс TableAnswer, который содержит строку, идентификатор плюс идентификатор вопроса, на который он ссылается. QuizTask объединяет Вопрос со всеми ответами. Запрос getQuestionsWithAnswer должен возвращать QuizTask, который оборачивает вопрос всеми ответами. Ошибка, указанная в названии, возникает в автоматически сгенерированном коде комнаты.
Соответствующая часть интерфейса:
@android.arch.persistence.room.Dao
public interface dbDao {
@Transaction
@Query("SELECT table_question.question, table_answer.answer FROM table_question, table_answer WHERE table_question.id = table_answer.id_question")
LiveData<List<QuizTask>> getQuestionsWithAnswers();
}
Класс TableQuestion:
@Entity(foreignKeys = @ForeignKey(entity = TableQuestionnaire.class,
parentColumns = "id",
childColumns = "id_questionnaire",
onDelete = CASCADE),
tableName = "table_question")
public class TableQuestion {
@PrimaryKey
public final int id;
@NonNull
public String question;
@NonNull
public int id_questionnaire;
public String subject;
public String category;
public String sub_category;
@Ignore
public String questionnaire;
public TableQuestion(int id, @NonNull String question, int id_questionnaire, String subject, String category, String sub_category) {
this.id = id;
this.question = question;
this.id_questionnaire = id_questionnaire;
this.questionnaire = null;
this.subject = subject;
this.category = category;
this.sub_category = sub_category;
}
public void setQuestionnaire(String questionnaire){
this.questionnaire = questionnaire;
}
}
Класс ТаблицаОтвет:
@Entity(foreignKeys = @ForeignKey(entity = TableQuestion.class,
parentColumns = "id",
childColumns = "id_question",
onDelete = CASCADE),
tableName = "table_answer")
public class TableAnswer {
@PrimaryKey
public final int id;
@NonNull
public String answer;
@NonNull
public final int id_question;
public boolean rightAnswer;
public TableAnswer(int id, String answer, int id_question, boolean rightAnswer) {
this.id = id;
this.answer = answer;
this.id_question = id_question;
this.rightAnswer = rightAnswer;
}
}
Класс QuizTask:
public class QuizTask {
@Embedded
private TableQuestion question;
@Relation(parentColumn = "id", entityColumn = "id_question")
private List<TableAnswer> answers;
public void setQuestion(TableQuestion question){ this.question = question; }
public TableQuestion getQuestion(){
return question;
}
public void setAnswers(List<TableAnswer> answers) { this.answers = answers; }
public List<TableAnswer> getAnswers() {
return answers;
}
}
AndroidStudio не показывает никаких ошибок при компиляции. Когда room автоматически генерирует код для getQuestionWithAnswers, она показывает ошибку компилятора «несовместимые типы: невозможно преобразовать в int». В автоматически сгенерированном dbDao_Impl.java есть строка, в которой пытаются создать объект TableQuestion, но с нулевым значением для параметра id. Вот где возникает ошибка. Что я должен изменить?