我正在创建一个视频游戏数据库。与问题相关的表格是:
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).
视频游戏详细信息页面需要跨所有三个表格的数据。因此,我必须INNER-JOIN这三个表,并获取数据。现在,这是问题所在。将返回许多将包含重复项的行。这是一个例子
标题发布Genre Character_name,picture_path
GTA V,2013,Action,Trevor,trevor_picture
GTA V,2013,Action,Michael,michael_picture
GTA V,2013,Action,Franklin,franklin_picture
GTA V,2013,Open-World,Trevor,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);