본문 바로가기

프레임워크36

[JPA] Entity Graph Entity Graph 쿼리 메서드마다 연관 관계의 fetch모드를 유연하게 설정할 수 있는 기능을 제공해준다. 끝이 One으로 끝나는 연관관계는 기본값이 EAGER모드이고, 끝이 Many로 끝나는 연관관계는 기본값이 LAZY이다.(임의로 모드를 바꿀 수 있다.) @Entity @Table(name = "account") @Getter @NoArgsConstructor public class Account { @ManyToMany @JoinTable( // JoinTable은 테이블과 테이블 사이에 별도의 조인 테이블을 만들어 양 테이블간의 연관관계를 설정 하는 방법 name = "account_authority", joinColumns = {@JoinColumn(name = "account_id", r.. 2023. 10. 24.
[JPA] 임베디드 타입 임베디드 타입 임베디드 타입 사용법 @Embeddable: 값 타입을 정의하는 곳에 표시 @Embedded: 값 타입을 사용하는 곳에 표시 기본 생성자 필수 임베디드를 사용하면 재사용이 가능하고 Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소 드를 만들 수 있습니다. @AttributeOverride: 속성 재정의 한 엔티티에서 같은 값 타입을 사용하려면 @AttributeOverrides, @AttributeOverride를 사용해서 컬러 명 속성을 재정의 합니다. 2023. 5. 1.
[JPA] 프록시와 연관관계(즉시로딩, 지연로딩, 영속성 전이) 프록시 객체의 초기화 Member를 조회할 때 Team도 함께 조회되는걸 막기 위해서 지연로딩을 사용한다. 이유는 쓸때없는 join을 해서 쿼리 조회 시간을 낭비 할수도 있기 때문입니다. 지연로딩 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne(fetch = FetchType.LAZY) //** @JoinColumn(name = "TEAM_ID") private Team team; .. } 지연로딩을 사용할 경우 실제 team을 사용하는 시점에서만 쿼리를 사용하게 됩니다. Team team = member.getTeam(); te.. 2023. 4. 29.
[JPA] 상속관계 매핑 관계형 데이터베이스는 상속 관계가 없습니다. 그래서 슈퍼타입 서브타입 관계라는 모델링 기으로 객체 상속과 유사하게 만들어 사용한다고 합니다. 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 크게 3가지가 있습니다. 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 장점 테이블 정규화 저장공간 효율화 외래 키 참조 무결성 제약조건 활용가능 단점 조인을 많이 사용해서 저능 저하 데이터저장시 INSERT 쿼리 2번 호출 장점 조인을 사용하지 않아서 조회 성능이 빠름 단점 엔티티가 매핑한 컬럼은 모두 null을 허용해야 한다 모든 테이블.. 2023. 4. 23.