작성
·
152
0
안녕하세요. 영한님
트랜잭션 관련 질문드립니다 !
서비스 레이어에 동일한 로직을 1, 2번으로 작성했는데 2번째 로직의 경우 트랜잭션이 2번 발생한다는 리뷰를 받아서 질문드립니다.
질문1. 람다를 쓸 경우 트랜잭션 문제로 성능상 이슈가 있는지
질문2. findTop으로 조회할 때 in 쿼리 사용 가능 여부
확인해주시면 감사하겠습니다!
아래에 코드 첨부합니다
``` 1번째 ```
fun findReviewsBySellerId(sellerId: String): List<Review> {
val products = productRepository.findAllBySellerId(sellerId)
val reviewsToShow = ArrayList<Review>()
for (product in products) {
val firstReview = reviewRepository.findAllByProductId(product.id!!).first()
reviewsToShow.add(firstReview)
}
return reviewsToShow
}
`````````
```2번째```
fun findReviewsBySellerId(sellerId: String): List<Review> {
return productRepository.findAllBySellerId(sellerId)
.map { product -> reviewRepository.findTopByProductIdOrderByCreatedDate(product.id!!) }
}
``````
답변 3
1
1
안녕하세요 진성진님
즐거운 코틀린을 사용하시는 군요! (저는 아직 사용을 안하는데, 부럽네요 ㅎㅎㅎ)
1. 트랜잭션 이슈가 발생하려면 쓰레드 자체가 달라져야 합니다. 단순히 람다를 사용한다고 해서 트랜잭션에 영향을 주지는 않습니다.
2. findTopByXxxIn(Collection x) 같은 식으로 작성하시면 IN도 동작할꺼에요. 만약 동작하지 않으면 버전에 따른 버그일 수 있는데, 오류 메시지를 알려주시면 제가 도움을 드리겠습니다.
감사합니다^^
0