인프런 커뮤니티 질문&답변

CLONET님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

트랜잭션, in 쿼리 질문

작성

·

153

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

CLONET님의 프로필 이미지
CLONET
질문자

늦은 시간에 질문 남겼는데ㅠ 빠른 답변 감사합니다 :)

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요 진성진님

즐거운 코틀린을 사용하시는 군요! (저는 아직 사용을 안하는데, 부럽네요 ㅎㅎㅎ)

1. 트랜잭션 이슈가 발생하려면 쓰레드 자체가 달라져야 합니다. 단순히 람다를 사용한다고 해서 트랜잭션에 영향을 주지는 않습니다.

2. findTopByXxxIn(Collection x) 같은 식으로 작성하시면 IN도 동작할꺼에요. 만약 동작하지 않으면 버전에 따른 버그일 수 있는데, 오류 메시지를 알려주시면 제가 도움을 드리겠습니다.

감사합니다^^

0

김영한님의 프로필 이미지
김영한
지식공유자

네^^ 도움이 되어서 다행입니다. 좋은하루 되세요 :) 

CLONET님의 프로필 이미지

작성한 질문수

질문하기