berryberrybin / board-project

0 stars 0 forks source link

[JPA] 1:1 매핑 관계 N+1 문제 #27

Open berryberrybin opened 1 year ago

berryberrybin commented 1 year ago

1:1 매핑시 N+1 문제

image

Member 와 Locker 코드

@Entity
data class Member(
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "Member_ID")
    var id: Long,

    @Column(name = "USERNAME")
    val userName: String,

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "LOCKER_ID")
    val locker: Locker
)
berryberrybin commented 1 year ago

해결방안 2가지

interface LockerRepository: CrudRepository<Locker, Long> {
    /* fetch join example  */
    @Query("select l from Locker l left join fetch l.member where l.id = :lockerId")
    fun findByIdWithFetchJoin(lockerId: Long): Locker

    /* entity graph example */
    @EntityGraph(attributePaths = ["member"])
    fun findTopById(lockerId: Long): Locker
}