본문 바로가기

jpa

(3)
jpa와 mysql 비관적락 사용시 주의점 이 두코드의 차이가 뭘까override fun findAndLockWarehouseByReservationTime( warehouseName: String, reservationTime: ReservationTime,): WareHouse { val wareHouseJpaEntity = wareHouseRepository.findByName(warehouseName) reservationRepository .findAndLockWarehouseByReservationTime(wareHouseJpaEntity.id, reservationTime) return wareHouseJpaEntity.toDomain()}override fun findAndLockWarehou..
n+1문제 종류별 해결법 n+1문제란? 1개의 셀렉트를 날려서 n개의 a엔티티를 가져왔는데,이때 a엔티티에 매핑되어있는 b엔티티때문에 n개의 셀렉트가 다시 나가는 현상즉class Home{ val humans:list val tv:Tv ...}이런상황에서 Home를 select해서 30개의 Home를 가져왔는데,이때 EAGER일경우엔 즉시 30개의 tv검색쿼리가 나가고,LAZY의 경우 해당값에서 tv에 첫 접근할때 tv검색쿼리가 나가는현상을 말함즉 쿼리가 뻥튀기돼서 부하를 주는 현상임기본적으로 모든 연관관계에서는@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)이렇게 LAZY로 설정을 해야함(기본값이 EAGER이라서 꼭 붙여줘야함)이런다고 문제가 다 해결되진않지만,일단 기본적으로 저렇..
jpa의 @Batchsize 동작방식 @Batchsize는,루트의 프라이머리키 잡고 긁어오는거임 그래서 order과 orderItem이 있고 균등분배일때, order이 10개고,orderItem이 1000개,배치사이즈가 10이면,1000개를 다 가져오는거임 실제로 initService.dbInit1(); initService.dbInit2(); initService.dbInit3(); 3개를 만들고, 1,2번은 2개만 추가(하위의하위도 각각2개), OrderItem orderItem1 = OrderItem.createOrderItem(book1, 20000, 3); OrderItem orderItem2 = OrderItem.createOrderItem(book2, 40000, 4); 3번에만 17개를 넣고,하위엔티티의 하위엔티티를 총 9개만..