Я видел эту проблему комната-ошибка-столбцы-возвращенные-запрос-не-имеет-поля-поля, но не могу применить ее к моей собственной ошибке.
Это мой класс Movie
@Entity
public class Movie {
@PrimaryKey
@NonNull
public String id;
@ColumnInfo
public String name;
@ColumnInfo
public String title;
}
Это мой класс UpcomingMovies
@Entity(
foreignKeys = {
@ForeignKey(
entity = Movie.class,
parentColumns = "id",
childColumns = "movieId")
},
indices = @Index("movieId")
)
@TypeConverters(MovieConverter.class)
public class UpcomingMovies {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo
public int movieId;
@ColumnInfo
public Movie movie;
}
Запрос, который я пытаюсь выполнить, я хочу получить список фильмов.
@Query("Select movie from UpcomingMovies")
LiveData<List<Movie>> loadUpcomingMovies();
И конкретная ошибка, которую я получаю
error: The columns returned by the query does not have the fields [id] in *.Model.POJOs.Movie even though they are annotated as non-null or primitive. Columns returned by the query: [movie]
Что я здесь пропустил?
Обновлено: добавлен MovieConverter
public class MovieConverter {
@TypeConverter
public String movieToString(Movie movie) {
return new Gson().toJson(movie);
}
@TypeConverter
public Movie stringToMovie(String src) {
return new Gson().fromJson(src, Movie.class);
}
}
@TomasJablonskis Готово
Попробуйте этот запрос:
@Query("Select * from UpcomingMovies")
LiveData<List<UpcomingMovies>> loadUpcomingMovies();
И в вашем классе UpcomingMovies есть метод GETTER:
public Movie getMovie() {
return this.movie;
}
Вы также можете получить список фильмов с помощью этого запроса:
@Query("Select * from Movie")
LiveData<List<Movie>> loadUpcomingMovies();
Удачи :)
Спасибо, братан, ошибка исчезла, не могли бы вы объяснить? Спасибо за ваше время :)
@Greggz Дело в том, что вы пытались получить список объектов Фильм, в то время как ПредстоящиеФильмы имеет только один его экземпляр.
Но нельзя ли просто вернуть список фильмов из таблицы «Предстоящие»?
Хм .. Я думал, в каждой строке будет фильм
Нет. На вашем месте я бы лучше запросил таблицу фильмов с определенным параметром в запросе SQL, чтобы получить конкретный список фильмов.
Что ж, вы правы, каждая строка UpcomingMovies имеет экземпляр Movie. Но это то же самое, как если бы вы получали простой список фильмов из таблицы фильмов.
@Greggz Оба запроса, которые я предоставил выше, вернут один и тот же список фильмов, только он будет заключен в класс UpcomingMovie, если используется первый.
@Greggz Если вы хотите иметь List <Movie> при запросе таблицы UpcomingMovies, вам следует изучить МНОГИЕ: МНОГИЕ взаимосвязи таблиц. Вы можете найти реализацию здесь
Я это вижу, поэтому, если Select * from UpcomingMovies будет возвращать фильмы с их movieId, почему Select movie from UpcomingMovies не возвращает каждый экземпляр фильма, присутствующий в таблице?
Спасибо! Это было именно то, о чем я собирался вас спросить, некоторая документация, потому что мне явно не хватает знаний ... Большое вам спасибо! Ваше здоровье
Добавить код MovieConverter.class