jpa

    [JPA] QueryDsl Gradle 설정

    QueryDsl 설정하는데 삽질을 많이해서 정리합니다. 환경은 다음과 같습니다. - 자바 : 17 - spring boot : 3.0.0 - gradle : 7.5.1 [Gradle 설정] 주석 처리 밑으로 4줄 plugins { id 'java' id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.1.0' } group = 'com' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCen..

    [JPA] 영속성 컨텍스트의 생명주기(feat.OSIV)

    [JPA] 영속성 컨텍스트의 생명주기(feat.OSIV)

    [문제 상황] 사용자 회원가입이 잘 되는지 확인하기 위해 다음과 같은 테스트 코드를 작성했다. "영속성 컨텍스트에 user 정보가 저장되어서 같은 영속성 컨텍스트에 있는 user와 newUser는 같은 객체가 된다"라고 생각했는데 테스트 케이스가 실패하였다. 확인해보니 user가 null로 나온다. ??? 그렇다면 왜 이 테스트 케이스는 실패하는가? 이를 위해 userService.save()의 코드를 살펴보았다. [분석] 먼저 내가 알고 있는 지식이 잘못된 것인지 확인하였다. [JPA의 객체 비교] 객체를 비교하는 방식에는 총 2가지가 있다. 1. 동일성 비교 (== 비교) 2. 동등성 비교 (equals()) JPA에서는 같은 트랜잭션일 때는 같은 객체임이 보장된다. 따라서 다음은 동일성 비교에서 t..

    [JPA] 연관관계의 주인이 '다'쪽에 있는 이유

    [JPA] 연관관계의 주인이 '다'쪽에 있는 이유

    연관관계의 주인이 '다'쪽에 있는 이유에 대해 살펴보자. 이를 위해 먼저 객체지향세계와 DB의 차이에 대해 알아야 한다. 🔍 객체지향과 DB, 연관관계의 주인이 필요한 이유 Member와 Team이라는 클래스 또는 테이블이 있다고 해보자. 여기서 이 둘은 다대일 단방향 관계이다. 객체지향에서 Member Team은 다음과 같이 표현될 수 있다. public class Member { int id; String memberName; Team team; } public class Team { int id; String teamName; } RDBMS에서는 다음과 같이 표현이 된다. DB와 객체지향의 큰 차이점은 객체지향 프로그래밍에서는 Member에서 Team으로의 조회는 가능하지만, Team에서는 Mem..