Spring38 따로 따로 조회했을 때 연관관계가 있는 객체를 자동으로 로드해주나? 모험해볼 이야기 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. Validation Custom 하기 What Validation이란 데이터값이 유효한지 판단하는 자바 빈 객첵이다. HTTP 요청 파리미터에 애노테이션으로 간단하게 유효성을 검증 할 수 있다. Why 값들의 유효성을 검증하기 위해 사용한다. 안그러면 어떤 데이터가 해당 컴포넌트로 전달될 때 믿고 사용할 수 없을 것이다. How 의존성 추가(gradle) implementation("org.springframework.boot:spring-boot-starter-validation") 애노테이션 만들기 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = PhoneValidator.class) public @interface Phone .. Spring 2023. 2. 24. 트랜잭션 전파속성 Build Up 트랜잭션은 DBMS의 상태를 변경하는 일련의 작업 단위 이다. 기본특징으로 ACID(원자성, 일관성, 고립성, 지속성)를 가진다. 트랜잭션은 시작지점과 끝나는 지점이 존재한다. == 트랜잭션의 경계 트랜잭션의 시작은 커넥션을 가져오는 것에 시작하고 종료는 커밋 또는 롤백에 의해 종료된다. JDBC의 기본 설정은 DB 작업 이후에 바로 커밋하는 옵션이 DEFAULT이다. 그러므로 자동 커밋 옵션을 false로 해주어야 새로운 트랜잭션이 시작하게 만들 수 있다. What 트랜잭션의 전파속성은 트랜잭션 진행을 어떻게 할지 결정하는 속성이다. *어떻게 == 새로운 트랜잭션을 열어? , 없이 그대로 진행시켜?, 이어붙여버려? 가 있다. 스프링은 전파속성을 제공하는 것 만큼 새로운 개념을 이용하고 .. Spring 2023. 2. 15. 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. 이전 1 2 3 4 ··· 8 다음