일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 순수jpa
- MappedSuperclass
- 분할상환분석
- 플러시
- Amortized Analysis
- 영속성 컨텍스트
- 정렬
- 즉시로딩
- DB
- 고아객체
- fetch join
- Algorithm
- relational DB
- n+1문제
- 지연로딩
- 페치조인
- commit
- Embeddable
- DiscriminatorColumn
- ROLLBACK
- Spring
- JPA
- Spring Data JPA
- relational database
- 영속성전이
- 관계형 데이터베이스
- Flush
- 엔티티 매핑
- DiscriminatorValue
- 값타입
- Today
- Total
목록JPA (9)
Jun's note
페치 조인(fetch join)이란 JPQL에서 성능 최적화를 위해 제공하는 기능이어서 SQL의 조인 종류와는 다르다. 먼저 페치 조인에 대해 알아보기전에, JPQL과 SQL에 대해 간단히 정리해본다. - JPQL: 엔티티를 대상으로 검색하는 객체지향쿼리 (어차피 JPQL식으로 코드 짜서 나중에 SQL로 자동 변환됨) 장점 -> 특정 데이터베이스 SQL에 의존 X - SQL: 테이블을 대상으로 - QueryDSL사용시 주의사항: 수동 flush해주기 (왜? 영속성 디비에 저장된것을 커밋을 통해 실제 디비에 옮겨주는데, 커밋이 뒤에 나오니깐 결과가 0이어서 제대로 결과값이 나오지 않음-> 그러니 em.flush() 수동으로 해주기) - 동적쿼리!!! , 자바 코드로 쿼리를 짜기때문에 SQL로 오류난 것을 ..
JPA를 사용할 때 변수값을 3가지 타입으로 정의할 수 있다. 1. 기본값 타입 2. 임베디드 타입 (복합 값 타입) (예, 좌표 x,y를 하나의 값으로 함께 사용) 3. 컬렉션 값 타입 (기본값 타입과 임베디드 복합해서 사용?) 1. 기본값 타입 기본타입 vs 객체타입 int, double - 변수를 공유하지 않음 (값 변경 x) (메모리에 각각의 주소에 할당됨) (값을 전달,복사하는 것) Integer, Long(클래스) - 변수를 공유 o (왜? 레퍼런스를 참조하기 때문, 주소를 연결시켜주기 때문에 다른 변수여도 저장소는 같은곳) (참조를 전달) 2. 임베디드 타입 연관되어있는 값끼리 묶어 하나의 클래스로 해결 (엔티티 X) 쉽게 말하면, 1. "회원 엔티티는 이름, 근무 시작일, 근무 종료일, 주..
먼저 영속성 전이에 대해 정리할것이다. 영속성 전이는 프록시나 지연로딩과 관련 없는 내용이다. (연관관계랑 관련 x) 이 점을 주의해야한다! 1. 영속성 전이(CASCADE) 부모 엔티티를 저장할때 자식 엔티티도 저장되도록 (부모를 기준으로 개발) 목적 : 개발의 편리함 때문 부모와 자식은 상속관계는 x 예를 들어, Member엔티티안에 Team도 있다면, Member객체를 저장할때 Team도 자동 저장되도록 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함을 제공 (주의!!!) 사용 방법: cascade 사용 @OneToMany(mappedBy="parent", cascade=CascadeType.ALL) 주의사항 부모랑 자식의 라이프스타일이 비슷할 경우에 사용(둘다 수정한다던지, 둘다 삭제..
프록시와 지연로딩이 서로 연관있기때문에 프록시, 지연로딩, 즉시로딩에 대해 정리해보겠다. 먼저 프록시가 나오게된 상황을 생각해보자. (상황) 예를 들어, Member와 Team이 서로 연관되어있다. Member를 조회할때 Team을 항상 조회해야할까? 이 둘을 같이 조회해야되면 같이 조회하면되지만, 그렇지 않을때도 있다. 필요하지도 않는데 항상 같이 조회하면 성능이 저하될 수도 있다. 이럴땐 어떻게 해야하나? (답은) 필요할때만 해당 엔티티를 조회하면 된다.(즉시로딩) (이 상황에 대해 더 쉽게 생각해보면, 게시물을 조회할때 댓글창을 클릭하지도 않았는데 댓글도 같이 조회되어야하는가? 성능문제와 관련있기 때문에 이 문제에 있어 생각해봐야한다) 즉시로딩에서 실제 엔티티안에는 프록시라는 가짜 엔티티가 있다! ..
1. 상속관계매핑 객체는 상속 관계 O, 관계형 데이터베이스는 상속 관계 X 이를 슈퍼타입 서브타입 관계라는 모델링 기법으로 해결 3가지 방법 1) 조인 전략 : 각각 테이블로 변환 (일반적인 방법, 각 테이블 연결) 2) 단일 테이블 전략 : 통합 테이블로 변환 (부모클래스 하나에 합치기) 3) 구현 클래스마다 테이블 전략 : 서브타입 테이블로 변환 (자식 클래스에 부모 속성이 들어있음) 2. 관련 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name=“DTYPE”) @DiscriminatorVal..
1. 엔티티 매핑 소개 객체와 테이블 매핑: @Entity, @Table 필드와 컬럼 매핑: @Column (엔티티 속성) 기본 키 매핑: @Id (식별자) 연관관계 매핑: @ManyToOne,@JoinColumn 위 어노테이션을 적어야 JPA가 관리할 수 있다. 잊지말고 적기!! 위에서 말한 4가지 엔티티 매핑에 대해 정리해본다. 2. 객체와 테이블 매핑 @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 @Table 3. 필드와 컬럼 매핑 @Column @Enumerated EnumType.STRING 사용하기!!! (EnumType.ORDINAL를 사용하면, 정의된 숫자로 저장되기 때문에 나중에 데이터끼리 혼란을 줄 수 있음, 그리고 ORDINAL이 기본값이기 때문에 무조건..
JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 영속성 컨텍스트 1. 영속성 컨텍스트란? “엔티티를 영구 저장하는 환경”이라는 뜻 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 EntityManager.persist(entity); (-> 이를 통해 영속상태가 됨) JPA 안에 존재 2. 영속성 컨텍스트 이점 1차 캐시 동일성(identity) 보장 트랜잭션을 지원하는 쓰기 지연 변경 감지(Dirty Checking) em.update() 는 없음. 대신 set메서드를 통해 값을 수정 스냅샷을 통해 값이 변경 되었는지 감지한다. (스냅샷에는 가장 처음 값이 저장됨) 스냅샷과 값이 다르면, 3번 과정인 update 쿼리를 쓰기 지연 SQL 저장소에 생성한다. 지연 로딩(Lazy Loadi..
JPA에 대해 자세히 알기전에 ORM, JDBC와의 관계를 정확히 알고 넘어가야 그 다음 내용도 이해하기 쉽다. 이전 포스팅에 JPA의 정의와 개념, ORM, JDBC에 대해 정리했다. 지금부터는 JPA에 대한 자세한 내용을 정리한다. 1. JPA 동작 과정 JPA는 애플리케이션과 JDBC 사이에서 동작 JPA가 DB에 값을 저장할때 JPA가 DB로부터 값을 조회할때 2. JPA 장점 1. SQL 중심적인 개발 -> '객체' 중심으로 개발 Java에서 객체 중심으로 개발하고 이를 DB에 객체 형태로 저장하고 싶은데, JPA를 사용하면 이 문제가 해결된다. 2. 생산성 CRUD가 간단하게 구현된다. 저장: jpa.persist(member) 조회: Member member = jpa.find(memberI..