-
[Spring Boot] 우승 멤버 별표표시 , @ElementCollectionBackend/개발 2021. 8. 5. 23:13반응형
오늘은 경매프로그램은 아니구,, 지금 쓰고있는 내전 사이트에서 리그 우승멤버한테 별표를 달아주라고 해서
재밌을것 같아서 살짝 해봤다~
<잠깐생각>
member에 우승 컬럼 추가해서
List isWin
1, 2, 이런식으로 넣고 조회?
List<Long>을 추가하려 이런 에러가 생겼다.
RDB에는 컬렉션과 같은 형태의 데이터를 컬럼에 저장할 수 없어, 별도의 테이블을 생성해야 한다고 한다.
@Entity가 아닌 Basic Type이나 Embeddable Class를 테이블로 생성하여 onetomany관계로 만들어준다.
@CollectionTable(컬렉션 테이블 이름, 조인 설정) 사용
이때
@ElementCollection
과@Entity
의@OneToMany
차이는@ElementCollection
- 연관된 부모 Entity 하나에만 연관됨 ( 부모와 독립적으로 사용 X)
- 항상 부모와 함께 저장, 삭제 - cascade.all인셈
- 부모 entity id와 추가 커럼(basic or embedded)타입으로 구성된다.
웬만하면 쓰지 않고 엔티티로 승격시켜 사용하는 것이 좋음.
근데 뭐 그냥 1, 2 값 저장하는거라 이거로 해도 될 것 같다.
@ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name="MEMBER_LEAGUE_RESULTS", joinColumns = @JoinColumn(name="MEMBER_ID")) private List<Long> leagueResults = new ArrayList<>();
이렇게 생성해보았다.
Hibernate: create table member_league_results ( member_id bigint not null, league_results bigint ) engine=InnoDB Hibernate: alter table member_league_results add constraint FK2tdtle21bepf0ar4mnb0ymesq foreign key (member_id) references members (account_id)
@Transactional public void updateWinMemberLeagueResult(List<String> members, Long league_id){ for(String member : members){ Long accountId = findMemberIdBySummonerName(member); memberRepository.findById(accountId).ifPresent( e-> { e.getLeagueResults().add(league_id); memberRepository.save(e); }); } }
그리고 우승자 닉네임, 대회 번호를 입력받아서 이겼는지 결과 업데이트를 해주는 함수를 작성해보았다.
} @Test public void 리그1회_우승_저장(){ List<String> winners = new ArrayList<>(); winners.add("xx"); winners.add("xxg"); winners.add("잇xxv"); winners.add("1xxy"); winners.add("Dxx1"); Long league_id=1l; memberService.updateWinMemberLeagueResult(winners,league_id); }
신기하게 member테이블에는 속성이 추가가 안돼있고, 새로운 테이블이 만들어져서
member_id랑 league_results로 이루어져있었다.
@CollectionTable을 쓰면 이런식으로 되는 것 같다.
view에 보여질 땐 memberEntity.getLeagueResults로 불러와줬다.
진짜 별거는 아니구,, 저기 소환사명에 별표를 찍어줬다.
ㅋㅋㅋㅋ
뭔가 이쁘게 메달모양이나 ,, 어떻게 해보고싶은데 꾸미는거엔 영 소질이 없다 ~_~
출처
'Backend > 개발' 카테고리의 다른 글
[Spring Boot] 예외처리, 테스트코드에 관한 고민 (0) 2021.08.13 [Spring Boot] 우승멤버 등록, controller 테스트 코드 작성하기 1 (0) 2021.08.12 [Spring Boot] 팀 생성, DB 슬라이스 테스트 (0) 2021.08.05 [Spring Boot] mysql 연동 , DB 연관관계 고민 (0) 2021.08.04 [Spring Boot] JPA (4) 2021.08.03