-
안녕하세요, 과제 1번 도중 문제가 생겨 질문 올립니다. override fun insertAlbums(albumInfos: List<BatchAlbumInfo>) {
albumInfos.map { albumInfo ->
threads.submit{
TransactionTemplate(txManager).executeWithoutResult {
processAlbumInfo(albumInfo)
}
}
}
}
private fun processAlbumInfo(albumInfo: BatchAlbumInfo) {
val artistSet = albumInfo.songs.flatMap { it.artists }.toMutableSet().apply { add(albumInfo.artist) }
val currentArtistSet = artistRepository.findByNameInWithAlbum(artistSet.toList())
println("\n<${albumInfo.title}> : ${albumInfo.artist} \nartist : " + currentArtistSet.map{it.name}.toString()+"\nartistSet : ${artistSet.toString()}")
val artistStringToEntity = artistSet.associateWith { artist ->
currentArtistSet.find { it.name == artist } ?: artistRepository.save(ArtistEntity(name = artist))
}
... 와 같이 코드를 짜보고 있는데, threads.submit 을 포함하지 않았을 땐 정상적으로 코드가 돌아감을 확인했습니다. artistStringToEntity map을 만들어 string을 Entity로 바꾸는 변수를 사용했는데, 어떤 케이스에선 repository의 findByNameIn 함수가 정상적으로 탐색을 성공하고, 어떤 경우에선 실패함을 확인했습니다. Test 실행 결과
Tate McRae는 잘 찾는 반면, 정국은 찾지 못하고 있는데, 동시성으로 인해 Repository에 접근하는 함수가 씹혔다..? 라고 판단을 해 제약을 걸어야 하는 것인지, 다른 오류인지 헷갈려 질문 올려봅니다! |
Beta Was this translation helpful? Give feedback.
Answered by
PFCJeong
Nov 10, 2023
Replies: 1 comment 2 replies
-
안녕하세요~ 첨부 주신 코드에는 |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
어디서 NPE가 발생하는 지 모르겠지만,
album을 조인해주고 있는데 join의 성격상 앨범이 없으면 아티스트도 조회가 안될 것 같네요.
굳이 조인을 해오고 싶으시다면 outer join으로 수정해보시면 좋을 것 같습니다.