Ошибка номера в возврате столбцов запроса

Я видел эту проблему комната-ошибка-столбцы-возвращенные-запрос-не-имеет-поля-поля, но не могу применить ее к моей собственной ошибке.

Это мой класс 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);
    }
}

Добавить код MovieConverter.class

Tomas Jablonskis 27.08.2018 17:43

@TomasJablonskis Готово

Greggz 27.08.2018 17:46
0
2
1 989
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте этот запрос:

@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 27.08.2018 18:07

@Greggz Дело в том, что вы пытались получить список объектов Фильм, в то время как ПредстоящиеФильмы имеет только один его экземпляр.

Tomas Jablonskis 27.08.2018 18:10

Но нельзя ли просто вернуть список фильмов из таблицы «Предстоящие»?

Greggz 27.08.2018 18:14

Хм .. Я думал, в каждой строке будет фильм

Greggz 27.08.2018 18:15

Нет. На вашем месте я бы лучше запросил таблицу фильмов с определенным параметром в запросе SQL, чтобы получить конкретный список фильмов.

Tomas Jablonskis 27.08.2018 18:15

Что ж, вы правы, каждая строка UpcomingMovies имеет экземпляр Movie. Но это то же самое, как если бы вы получали простой список фильмов из таблицы фильмов.

Tomas Jablonskis 27.08.2018 18:16

@Greggz Оба запроса, которые я предоставил выше, вернут один и тот же список фильмов, только он будет заключен в класс UpcomingMovie, если используется первый.

Tomas Jablonskis 27.08.2018 18:17

@Greggz Если вы хотите иметь List <Movie> при запросе таблицы UpcomingMovies, вам следует изучить МНОГИЕ: МНОГИЕ взаимосвязи таблиц. Вы можете найти реализацию здесь

Tomas Jablonskis 27.08.2018 18:20

Я это вижу, поэтому, если Select * from UpcomingMovies будет возвращать фильмы с их movieId, почему Select movie from UpcomingMovies не возвращает каждый экземпляр фильма, присутствующий в таблице?

Greggz 27.08.2018 18:21

Спасибо! Это было именно то, о чем я собирался вас спросить, некоторая документация, потому что мне явно не хватает знаний ... Большое вам спасибо! Ваше здоровье

Greggz 27.08.2018 18:21

Другие вопросы по теме