match_id로 Riot API에 검색을하고 DB에 저장을 해당 게임의 정보를 저장해야한다. 한 게임에 10명의 플레이어가 있고 한 플레이어당 저장해야하는 정보가 20개가 넘는다. 만약 하나의 Entity에 모두 저장하려면 플레이어 외에 게임 정보를 포함해 200개 이상의 컬럼이 필요해진다. 그래서 Game과 Player의 테이블을 분리했다.
Game
@Entity
@Getter @Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Game {
@Id
@Column(name = "game_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String mode;
private String matchId;
private Long duration;
@OneToMany(mappedBy = "game", cascade = CascadeType.ALL, orphanRemoval = true)
@Builder.Default
private List<Player> players = new ArrayList<>();
}
Game 테이블에있는 red, blue 리스트는 api를 요청하면 blue 팀 먼저, 그 다음 red팀이 나와서 필요할까 싶지만, 우선은 만들었고 이 후에 필요없다 생각되면 삭제할 예정이다.
Player
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Player {
@Id
@Column(name = "player_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@JoinColumn(name = "game_id")
@ManyToOne(optional = false)
private Game game;
private String summonerName;
private String championName;
private String individualPosition;
private Long champLevel;
private Long kills;
private Long deaths;
private Long assists;
private Long totalDamageDealtToChampions;
private Long totalDamageTaken;
private Long goldEarned;
private Long item0;
private Long item1;
private Long item2;
private Long item3;
private Long item4;
private Long item5;
private Long item6;
private Long wardsPlaced;
private Long wardsKilled;
}
game_id로 game을 삭제할 때, player도 삭제해야한다.
orphanRemoval vs CascadeType.REMOVE
- 부모 엔티티가 삭제되면 자식 엔티티도 전부 삭제되는 것은 동일하지만 원인이 다름
- orphanRemoval = true 옵션은 부모 엔티티가 사라지면서 자식 엔티티와의 참조(연결)가 끊어져서 삭제됨
- CascadeType.REMOVE 옵션은 원래 엔티티가 삭제될 때 연관된 엔티티를 전부 삭제하는 옵션
- orphanRemoval 옵션은 Collections 에서 자식 엔티티를 삭제하는 걸로 DB 에서도 삭제 가능하지만 cascade 는 불가능
'개발' 카테고리의 다른 글
[JPA] 양방향 매핑 순환참조 문제 (0) | 2023.09.07 |
---|---|
[Springboot] 롤문철 업데이트 기능 + @DynamicUpdate (0) | 2023.09.05 |
[스프링부트] Querydsl 쿼리문 작성 (닉네임 공백, 대소문자) (0) | 2023.08.21 |
[Riot Developer] 스프링부트에서 Riot API로 데이터 추출 (0) | 2023.08.16 |
[SpringBoot] 이메일 인증 구현 (0) | 2023.08.11 |