[TIL/JPA] 기본개념 : 영속성전이(CASCADE), 고아 객체
·
TIL/JPA
1. 영속성 전이 : CASCADE영속성 전이(CASCADE)는 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용하는 것이다.ex) 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장 위의 그림을 코드로 만들고 실행시켜보겠다.아래와 같이 Parent와 Child 엔티티를 만들고 연관관계를 맺어주었다.@Entitypublic class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") private List childList = new ArrayList(); public void addChild(Child..
[TIL/JPA] 기본개념 : 프록시와 연관관계 관리[즉시(EAGER)로딩, 지연(LAZY)로딩]
·
TIL/JPA
1. 프록시어느 경우에 Member만 가져오고, 어느 경우에는 Member와 Team 같이 가져와야한다.Member만 가져와야 하는데 Team도 같이 가져오는 경우에는 낭비이다.이런 경우를 해결하기 위해서는 지연 로딩과 즉시 로딩을 사용해서 해결을 하는데, 해당 개념을 공부하기 위해서는 프록시에 대해서 먼저 알아봐야한다! JPA에서는 find() 메서드가 아닌 getReference() 메서드를 제공하고 있다.em.find() 메서드는 데이터베이스를 통해서 실제 엔티티 객체를 조회를 하지만,em.getReference() 메서드는 참조를 가져오는 메서드이며, 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회. 즉, 쿼리를 날리지 않고 조회를 하는 메서드이다. 아래 코드를 보고 어떻게 동작하는지 ..
[TIL/JPA] 기본개념 : 고급 매핑(상속관계 매핑, @MappedSuperclass)
·
TIL/JPA
1. 상속관계 매핑객체는 상속관계가 있지만, 관계형 데이터베이스는 상속 관계가 없다.비슷한 걸로 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.상속관계 매핑은 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 3가지 방법(DB 설계 방법)1) 조인 전략2) 단일 테이블 전략 : 논리 모델을 한 테이블로 합치는 것3) 구현 클래스마다 테이블 전략 : 테이블을 각각 만들어서 알아서 공통되는 컬럼을 가지고 있는 것* JPA 기본 전략은 단일 테이블 전략이다. 주요 어노테이션@Inheritance(strategy = InheritanceType.XXX)JOINED : 조인 전략SINGLE_TABLE : 단일 테이블 전..
[TIL/JPA] 기본 개념 : 다양한 연관관계 매핑
·
TIL/JPA
1. 연관관계 매핑시 고려사항 3가지1) 다중성다대일: @ManyToOne일대다: @OneToMany일대일: @OneToOne다대다: @ManyToMany- 다중성은 대칭성이 있다.- 다대다는 실무에서 사용하면 안된다. 2) 단방향, 양방향- 테이블> 외래키 하나로 양쪽 조인 가능하다. 그래서 방향이라는 개념이 없다. - 객체> 참조용 필드가 있는 쪽으로만 참조 가능> 한쪽만 참조하면 단방향이고, 양쪽이 서로 참조하면 양방향사실 객체 입장에서는 양방향이라는 것이 없음. 각 객체가 한쪽 방향으로 향해있으며, 단방향이 2개가 있는 것 3) 연관관계의 주인- 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음- 객체 양방향 관계는 A -> B, B -> A 처럼 참조가 2군데가 있음- 객체 양방향 관계는 참..
[Error] 스프링 부트 테스트 extend 관련 에러 발생
·
Trouble Shooting(Error)
Error creating bean with name 'com.example.productorderservice.product.ProductApiTest': Injection of autowired dependencies failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.example.productorderservice.product.ProductApiTest': Injection of autowired dependencies failed:Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'lo..
[TIL/JPA] 기본 개념 : 연관관계 매핑 기초
·
TIL/JPA
이번 파트에서는 객체의 참조와 테이블의 외래 키를 매핑하는 것을 배우고 정리를 해보았다!1. 연관관계가 필요한 이유시나리오 및 연관관계- 회원과 팀이 있다.- 회원은 하나의 팀에만 소속될 수 있다.- 회원과 팀은 N:1 관계이다. 객체를 테이블에 맞추어 모델링을 하면, 협력 관계를 만들 수 없고!테이블은 외래 키(FK)로 조인을 사용해서 연관된 테이블을 찾고, 객체는 참조를 사용해서 연관된 객체를 찾는다.테이블과 객체 사이에는 이런 큰 간격이 있다. 객체를 테이블에 맞추어 모델링한 코드 예시)> Memberimport jakarta.persistence.Column;import jakarta.persistence.Entity;import jakarta.persistence.GeneratedValue;im..
[TIL/JPA] 기본 개념 : 엔티티 매핑
·
TIL/JPA
1. 엔티티 매핑- 객체와 테이블 매핑 : @Entity, @Table- 필드와 컬럼 매핑 : @Column- 기본키 매핑 : @Id- 연관관계 매핑 : @ManyToOne, @JoinColumn(추후에 정리 예정!)2. 객체와 테이블 매핑1) @Entity- @Entity가 붙은 클래스는 JPA가 관리하며, 엔티티라 한다.- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수이다. !!주의!!- 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)- final 클래스, enum, interface, inner 클래스 사용할 수 없다.- 저장할 필드에 final 사용할 수 없다. 2) @Entity 속성 정리속성 : name> JPA에서 사용할 엔티티 이름을 지정한다...
[TIL/JPA] 기본 개념 : 영속성 관리 - 내부 동작 방식
·
TIL/JPA
1. 엔티티 매니저 팩토리와 엔티티 매니저EntityManagerFactory는 애플리케이션 생성할 때 1번만 생성한다. 1개의 DB당 1개!EntityManager는 쓰레드 간에 공유하지 말아야 한다. 고객의 요청 1회당 1번씩 생성된다. 2. 영속성 컨텍스트엔티티를 영구 저장하는 환경이라는 의미EntityManager.persist(entity);DB에 저장하는 것이 아니라 엔티티를 영속성 컨텍스트 라는 곳에 저장한다는 의미 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다.엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. 고객의 요청이 들어오면 생성하고, 고객의 요청이 끝나면 사라짐(아래 영속성 컨텍스트의 이점에 있는 1차 캐시도 이때 다 사라지기 때문에 큰 성능 이점을 얻을 수는 없음) 3..
[Error] Gradle Compile Error, Gradle BUILD FAILED, Gradle Verification Test Error, Task :compileJava FAILED
·
Trouble Shooting(Error)
IDE는 intelliJ를 사용하고 있고, SpringBoot, Gradle, Java 17로 프로젝트 구성했다.intelliJ Build Tools의 Gradle의 Build And Run은 intelliJ로 설정을 해서 그냥 실행을 시켰을 때는 문제가 발생하지 않았다. Gradle의 verification -> test를 실행하면 문제가 발생했다. 에러 메시지에러 메시지의 일부를 가져와서 붙여 넣어보면 잘되는 것들이 안된다고 하고 찾을 수 없다고 한다.. > Task :compileJava FAILED Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warni..