jpa8 따로 따로 조회했을 때 연관관계가 있는 객체를 자동으로 로드해주나? 모험해볼 이야기 JPA는 영속성 컨텍스트를 이용하여 쓰기 지연을 제공하고 영속성 컨텍스트에 적재된 객체들은 DB에 쿼리를 날리지 않는 것으로 알고있다. 서로 연관관계가 있는 객체들을 한번에 조회하는 것이 아니라 따로 조회한다 했을 때, 서로 연관 되있는 객체는 영속성 컨텍스트에 올라가 있으니 자동으로 연관관계 객체를 넣어주는지 궁금했다. 1:N관계로 이루어져 있는 Team과 User 객체가 있다. id가 0-4번 팀이 존재하고 각 User가 5명씩 속해있다 1. 따로 조회했지만 객체가 자동으로 연관관계를 맺어 주는지 실험해 봤다. public List test() { List teams = teamRepository.findAll(); List byTeamIn = userRepository.findByT.. Spring/JPA 2023. 3. 21. cacscade.REMOVE VS orphanRemoval = true What 영속성 컨텍스트는 cacade와 orphanRemoval이라는 옵션을 추가적으로 제공해준다. cascade는 말 그대로 DB의 cascade 전략과 유사하다. orphanRemoval은 고아 객체의 전이에 대한 전략으로서 T/F 두가지의 값을 가지고있다. T로 설정하면 고아 객체는 Delete쿼리가 나가도록 도와준다. cascade.REMOVE와 orphanRemoval=true의 차이 CascadeType.REMOVE 부모 엔티티가 삭제되면 자식 엔티티도 삭제된다. 즉, 부모가 자식의 삭제 생명 주기를 관리한다. 만약 CascadeType.PERSIST도 함께 사용하면, 부모가 자식의 전체 생명 주기를 관리하게 된다. Q. 부모가 아닌 자식만 떨어뜨린다면 ? 과연 어떻게 될까. ⇒ 아무일도 일.. Spring/JPA 2023. 2. 26. Repository 작명 이슈 (mapping.PropertyReferenceException) 상황 Caused by: org.springframework.data.mapping.PropertyReferenceException: No property '${customRepository method name}' found for type '${entity type}' JPA에서 제공하는 쿼리를 사용하지 않고 커스텀해서 사용하기 위해 커스텀한 레포지토리를 만들었다. 그런데 관련 메소드에 프로퍼티가 없다라는 로그를 찍고 애플리케이션이 실행되지 않았다. 원인 분석 관련 자료를 찾아보니 네이밍을 짓는 규칙이 있는 것 같음. 실제로 코드에서 어떻게 읽어오는지 알 수 는 없었음. 해결 [이름을 잘 지어야 한다.] custom${EntityName}Repsitory ← custom${EntityName}Repo.. Spring/JPA 2023. 2. 15. EntityManger.persist()를 하고 ID값을 반환하는 과정 내가 알고 있던 persist() ,find() JPA의 EntityManget. 객체에서 find메소드는 EntityManget.find( $Object.class, Obejct.getId() ) 으로 사용한다. 그러므로 find를 할 때 1차 캐시를 조회하고 DB로 가져와 영속성 컨텍스트에 올린다. 하지만 em.persist()를 하면 쓰기지연에 보관되고 식별자 값은 알아서 만들어주는 줄 알고 있었다. Q. 보통 저장을 할때 em.persist($Object); 를 통해 Persistenc Context에 올려놓는다(1차 캐시) 그런데 만약 Repository에서 em.persist( $Obejct )를 진행하고 반환 값이 $Obejct.getId()라면? 식별자가 null인 경우는 어떻게 영속성 컨.. Spring/JPA 2021. 7. 2. JPA JPA Java Persistence API 자바 ORM 기술에 대한 표준API다. ORM : 객체와 관계형 DB를 매핑한다는 뜻이다. 객체와 관계형 DB사이의 차이를 해결해주는 좋은 도구이다. JPA 장점 특정 구현 기술에 대한 의존도를 줄이고 다른 구현 기술로 손쉽게 교체할 수 있다. 왜 JPA를 사용하는가? 생산성 Mybatis, SQL매퍼를 사용하면 JDBC API 사용 코드를 많이 줄일 수 있지만 여전히 반복적인 CRUD를 작성해야 한다. 객체 중심적 설계에서 일정 Boundary에 도달하게 되면 데이터 중심 설계로 변질된다. JPA는 실행시점에 자동으로 SQL을 만들어서 실행한다. SQL 작성이 주가 아닌 어떤 SQL이 실행될지 생각만 하면된다. 유지보수 SQL을 직접 다루면 엔티티의 필드만 .. Spring/JPA 2021. 5. 10. 이전 1 2 다음