Моя проблема : Я пытаюсь устранить ошибку компиляции в следующем операторе Room @Query в Room DAO. Как видите, оператор запроса SQLite объединяет различные поля из разных таблиц. Недостающие поля, идентифицированные ошибкой, являются частью конструктора класса Notes, определенного в типе List для метода. Я думаю, что мне нужно изменить указанный тип списка. Если я прав, мне нужно какое-то руководство / предложение о том, как мне это решить. Нужно ли создавать новый класс и DAO только с указанными полями c? Или, может быть, просто класс, поскольку таблица не указана c только для этих полей. Ошибка:
ошибка: столбцы, возвращаемые запросом, не имеют полей [commentID, questionID, quoteID, termID, topicID, удален] в com.mistywillow.researchdb.database.entities. Примечания, даже если они аннотированы как ненулевые или примитивные. Столбцы, возвращаемые запросом: [NoteID, SourceID, SourceType, Title, Summary] Список getNotesOnTopi c (строка topi c);
@Query("SELECT n.NoteID, s.SourceID, s.SourceType, s.Title, c.Summary FROM Comments as c " +
"LEFT JOIN Notes as n ON n.CommentID = c.CommentID " +
"LEFT JOIN Sources as s ON n.SourceID = s.SourceID " +
"LEFT JOIN Topics as t ON n.TopicID = t.TopicID WHERE t.Topic = :topic AND n.Deleted = 0")
List<Notes> getNotesOnTopic(String topic);
Что я пытаюсь : я пытаюсь преобразовать существующее настольное приложение Java со встроенной базой данных SQLite. Приведенный выше запрос прекрасно работает в этом приложении. Я только хочу передать полевые данные из этих таблиц.
Что я пробовал : я немного погуглил и посетил некоторые форумы за последние несколько дней (например, Android Forum , Developer. Android .com), но большинство примеров Room @Query представляют собой полные запросы к одной таблице (например, «Выбрать * из таблицы»). Ничто из того, что я обнаружил (возможно, что-то есть), не касается, как и что делать, если вы объединяете и запрашиваете только определенные c поля в таблицах.