일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c언어
- design pattern
- MySQL
- Java
- 디자인 패턴
- 자료구조
- mongoDB
- IT
- 자바
- 네트워크
- 운영체제
- redis
- spring webflux
- Heap
- 알고리즘
- Data Structure
- Algorithm
- react
- 파이썬
- 백준
- OS
- MSA
- Galera Cluster
- JavaScript
- C
- JPA
- Spring
- 컴퓨터구조
- Proxy
- Kafka
- Today
- Total
목록JPA (10)
시냅스
경로 표현식 .(점) 을 찍어 객체 그래프를 탐색하는 것 select m.username // 상태 필드 from Member m join m.team t // 단일 값 연관 필드 join m.orders o // 컬렉션 값 연관 필드 where t.name = '팀A' 상태 필드 state field 단순히 값을 저장하기 위한 필드 연관 필드 association field 연관관계를 위한 필드 단일 값 연관 필드 @ManyToOne, @OneToOne 대상이 엔티티 묵시적 내부 조인 발생, 탐색이 가능하다. select m.team from member m 에서 m.team.name으로 갈 수 있음 컬렉션 값 연관 필드 @OneToMany, @ManyToMany 대상이 컬렉션 명시적 조인 join 키..
JPA의 데이터 타입 분류 엔티티 타입 @Entity 로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 int, integer string 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 기본값타입 자바 기본 타입 (int, double) 래퍼 클래스 (Integer, Long) String 생명주기를 엔티티에 의존 값 타입은 공유해서는 안된다. 회원 이름 변경시 다른 회원의 이름도 함께 변경되면 안됨 int, double 같은 기본 타입(Primitive type) 은 절대 공유해선 안된다. 기본 타입은 항상 값을 복사함 (깊은 복사) Integer 같은 래퍼 클래스나 String 같은 특수한 클래스는 공유 가능한 객체이지만 변경..
즉시 로딩과 지연 로딩 즉시로딩은 엔티티를 로딩하면서 관련된 모든 엔티티를 함께 로딩 하는것 지연로딩은 필요한 시점에 가져오는 것을 말한다. 가급적 지연 로딩만 사용해야 한다. 즉시 로딩을 적용하면 JPQL에서 N + 1 문제를 일으킨다. 만약 Member가 외래키를 갖고 있는 주인이고, Member가 3개에 각 Member의 소속된 팀이 전부 다르다면 쿼리는 4번이 실행된다 (member, team1, team2, team3) 이런 문제는 N(team) + 1(member)이라고 한다. @ManyToOne, @OneToOne은 기본이 즉시 로딩으로 반드시 LAZY로 설정해야 한다. 영속성 전이 : CASCADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들 수 이싿. 종류 ..
프록시 em.find() 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference() 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 데이터베이스에 조회가 필요할 때 필요한 시점에 조회한다. 데이터베이스에 쿼리가 실행이 되지 않았음에도 조회가 되는 것 프록시는 실제 클래스를 상속 받아 만들어져 겉 모양이 같다. 클라이언트는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨 프록시 객체는 처음 사용할 때 한 번만 초기화한다. 프록시 객체를 초기화 할 때 프록시 객체가 실제 엔티티로 바뀌는 것은 아니고, 초기화 되면 프록시 객체를 통해서 실제 엔티티에 접근 가능하다. 프록시 객체는 원본 엔티티를 상속 받는다, 따라서 타입 체크시 주의해야함 프록시 내부에는 실제 객체의 참조를..
MappedSuperclass 상속관계 매핑과는 관련이 없다. 엔티티, 테이블과 매핑할 수 없다. 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다. 테이블과 관계 없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할 조회, 검색 불가. (em.find(BaseEntity) 불가) 직접 생성해서 사용할 일이 없으므로 추상 클래스를 권장한다. 주로 등록일 수정일 등록자 수정자 등 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용한다. 참고로 @Entity 클래스는 엔티티나 @MappedSuperclass로 지정한 클래스만 상속 가능하다. @MappedSuperclass public abstract class BaseEntity { private String createdBy; p..
상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈터파입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 조인전략 각각 테이블로 변환 장점 테이블 정규화 외래 키 참조 무결성 제약조건 활용 가능 저장공간 효율화 단점 조회시 조인을 많이 사용, 성능 저하 조회 쿼리가 복잡함 데이터 저장시 Insert sql 2번 호출 단일 테이블 전략 통합 테이블로 변환 장점 조인이 필요 없으므로 일반적으로 조회 성능이 빠름 조회 쿼리가 단순함 단점 자식 엔티티가 매핑한 컬럼은 모두 Null 허용 단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있음, 상황에 따라 ..
JPA 연관관계 다중성 다대일 @ManyToOne 속성 optional : false 로 설정하면 연관된 엔티티가 항상 있어야 한다. fetch : 글로벌 페치 전략 (FetchType.Lazy) cascade : 영속성 전이 targetEntity : 연관된 엔티티의 타입 정보를 저장한다. 거으 ㅣ사용하지 않는다. @JoinColumn 속성 name : 매핑할 외래 키 이름 referencedColumnName : 외래키가 참조하는 대상 테이블으 ㅣ컬럼명 foreignKey(DDL) : 외래 키 제약조건 직접 지정 unique nallable, insertable updatable columnDefinition table 일대다 @OneToMany 속성 mappedBy : 연관관계의 주인 필드를 선택한..
엔티티 매핑 객체와 테이블 매핑 @Entity JPA가 관리하는 클래스 테이블과 매핑할 클래스 기본 생성자(public, protected)를 필수로 생성해야 한다. @Table 속성 name JPA에서 사용할 엔티티 이름을 지정한다. 기본값 : 클래스의 이름을 그대로 사용한다. 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. catalog 데이터베이스 catalog 매핑 schema 데이터베이스 schema 매핑 uniqueConstraints DDL 생성 시에 유니크 제약 조건 생성 필드와 컬럼 매핑 @Column 컬럼 매핑 속성 name 필드와 매핑할 테이블의 컬럼 이름 insertable, updatable 등록, 변경 가능 여부 nullable(DDL) null 값의 허용 여부 unique..
영속성 컨텍스트 persistence context 엔티티를 영구 저장하는 환경 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다. J2SE(일반 자바 어플리케이션 개발 툴) EntityManger 와 영속성 컨텍스트는 1:1 의 관계이다. J2EE (서버용 자바 어플리케이션 개발 툴), Spring 과 같은 컨테이너 환경 EntityManager와 영속성 컨텍스트는 N:1 의 관계이다. 엔티티의 생명주기 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속 (manag..
JPA, Java Persisitence API 자바의 주력 ORM 데이터 접근 기술이다. ORM(Object-Relational Mapping) 은 객체와 데이터베이스의 관계를 매핑해주는 도구이다. 객체는 객체대로 설계, 데이터베이스는 데이터베이스대로 설계 => 중간에서 ORM이 맵핑한다. 데이터베이스 접근을 프로그래밍 언어의 관점에서 맞출 수 있다. SQL 문을 직접 작성하지 않고 엔티티를 객체로 표현할 수 있다. 객체를 통해 간접적으로 데이터베이스를 다룬다. 대개 Querydsl과 함께 사용한다. 주로 hibernate 구현체를 사용한다. 1차 캐시와 동일성(identity) 를 보장한다 트랜잭션을 지원하는 쓰기 지연(transactional write-behind) 지연 로딩(lazy Loadin..