Исключение повторяющихся данных, возвращаемых во время внутреннего соединения

Я создаю базу данных видеоигр. К вопросам относятся следующие таблицы:

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); 

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

Alpesh Jikadra 30.03.2018 18:57

Как насчет добавления отдельного предложения в ваш запрос выбора, например выбрать отличный * из ...

Alpesh Jikadra 30.03.2018 19:00

Не думаю, что это поможет. По-прежнему будет несколько записей, и это нормально. Я просто хочу избежать добавления нескольких объектов в свой список во время сопоставления.

Prashant Pandey 30.03.2018 19:13

Не могли бы вы показать, как вы составляете карту?

Alpesh Jikadra 30.03.2018 19:17

У меня это сейчас в вопросе.

Prashant Pandey 30.03.2018 19:23

@AlpeshJikadra У меня сейчас вопрос.

Prashant Pandey 30.03.2018 19:26

Вы можете использовать Set вместо List и переопределить метод equals и hashcode для объекта, который вы хотите добавить в Set

Alpesh Jikadra 30.03.2018 19:28

Думаю, я понял. Я использую HashSet, который отслеживает все символы, которые я добавил (используя уникальный идентификатор символа). Прежде чем добавлять приведение в свой список, я проверяю, содержит ли он уже этот символ или нет. Интересно, как этот дополнительный код повлияет на задержку ...

Prashant Pandey 30.03.2018 19:34
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
43
0

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