Я создаю базу данных видеоигр. К вопросам относятся следующие таблицы:
1. game_data_primary (contains primary data such as release year and production company).
2. game_genre (contains game genre, a games can have multiple genres)
3. game_cast (again, a game can have many characters).
На странице сведений о видеоиграх требуются данные по всем трем таблицам. Следовательно, мне нужно ВНУТРЕННЕЕ СОЕДИНЕНИЕ трех таблиц и получение данных. Теперь вот в чем проблема. Будет возвращено много строк, содержащих дубликаты. Вот один пример
Название выпуска Жанр Имя_персонажа, путь_к картинке
GTA V, 2013, Экшен, Trevor, trevor_picture
GTA V, 2013, Экшен, Майкл, michael_picture
GTA V, 2013, Экшен, Франклин, franklin_picture
GTA V, 2013, Открытый мир, Тревор, trevor_picture
.................................................. .
.................................................. .
Теперь мне нужно создать объект видеоигры для ResultSet. У объекта есть Список отлитых моделей. В идеале он должен содержать 3 записи (T, M и F). Но во время сопоставления я в конечном итоге добавлю много повторяющихся записей в свой список приведений из-за характера набора результатов в этом случае.
Есть ли правильный способ сделать это? Мне нужен эффективный способ создания моей модели видеоигры из ResultSet.
Вот отображение:
List<GameCastModel> cast = new ArrayList<>();
List<String> genres = new ArrayList<>();
GameInfoModelBuilder gameInfoBuilder = GameInfoModelBuilder.builder();
for (Map<String, Object> row : rows) {
cast.add(MovieCastModel.builder().name(String.valueOf(row.get("name")))
.character_name(String.valueOf(row.get("character_name")))
.profile_path(String.valueOf(row.get("profile_path"))).build());
genres.add(CinestopConstants.GENRE_MAP.get(String.valueOf(row.get("genre_id"))));
gameInfoBuilder.title(row.get("title").toString())
.budget(String.format("%.2f",
((Double) (Double.parseDouble(row.get("budget").toString()) / 1000000))))
.plot(row.get("plot").toString())
.release(row.get("release_date").toString())
.revenue(String.format("%.2f",
((Double) (Double.parseDouble(row.get("revenue").toString()) / 1000000))))
.runtime(row.get("runtime").toString()).tagline(row.get("tagline").toString())
.language(row.get("language").toString())
;
}
gameInfoBuilder.genre(genres);
gameInfoBuilder.cast(cast);
Как насчет добавления отдельного предложения в ваш запрос выбора, например выбрать отличный * из ...
Не думаю, что это поможет. По-прежнему будет несколько записей, и это нормально. Я просто хочу избежать добавления нескольких объектов в свой список во время сопоставления.
Не могли бы вы показать, как вы составляете карту?
У меня это сейчас в вопросе.
@AlpeshJikadra У меня сейчас вопрос.
Вы можете использовать Set вместо List и переопределить метод equals и hashcode для объекта, который вы хотите добавить в Set
Думаю, я понял. Я использую HashSet, который отслеживает все символы, которые я добавил (используя уникальный идентификатор символа). Прежде чем добавлять приведение в свой список, я проверяю, содержит ли он уже этот символ или нет. Интересно, как этот дополнительный код повлияет на задержку ...




Пожалуйста, добавьте создать таблицу и вставить запрос, а также добавьте ожидаемый результат на основе вашего запроса вставки.