분류 전체보기(77)
-
즉시 로딩과 지연 로딩
즉시 로딩 즉시 로딩(Eager Loading)을 사용하려면 @ManyToOne의 fetch 속성을 FetchType.EAGER로 지정한다. // 즉시 로딩 설정 @Entity public class Member { ... @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "TEAM_ID") private Team team; ... } 위의 코드에서 회원과 팀을 즉시 로딩으로 설정했다. // 즉시 로딩 실행 코드 Member member = em.find(Member.class, "member1"); Team team = member.getTeam(); //객체 그래프 탐색 따라서 em.find(Member.class, "member1")로 회원을 조회하는..
2023.07.31 -
프록시
객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 하지만 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는것이 효과적이다. JPA는 즉시 로딩과 지연 로딩이라는 방법으로 둘을 모두 지원한다. 프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. 예를 들어 회원 엔티티를 조회할 때 연관된 팀 엔티티는 비즈니스 로직에 따라 사용될 때도 있지만 그렇지 않을 때도 있다. //회원 엔티티 @Entit..
2023.07.28 -
@SecondaryTable : 엔티티 하나에 여러 테이블 매핑
@SecondaryTable을 사용하면 한 엔티티에 여러 테이블을 매핑할 수 있다. @Entity @Table(name = "BOARD") @SecondaryTable(name = "BOARD_DETAIL", pkJoinColumns = @PrimaryKeyJoinColumn(name = "BOARD_DETAIL_ID")) public class Board { @Id @GeneratedValue @Column(name = "BOARD_ID") private Long id; private String title; @Column(table = "BOARD_DETAIL") private String content; ... } Board 엔티티는 @Table을 사용해서 BOARD 테이블과 매핑했다. 그리고 @S..
2023.06.13 -
조인 테이블
데이터베이스 테이블의 연관관계를 설계하는 방법은 크게 2가지다. 1. 조인 컬럼 사용(외래 키) 2. 조인 테이블 사용(테이블 사용) ▼ 조인 컬럼 사용 테이블 간에 관계는 주로 조인 컬럼이라 부르는 외래 키 컬럼을 사용해서 관리한다. 외래키에 null을 허용하는 관계를 선택적 비식별관계라한다. 회원과 사물함을 조인할 때 외부조인(OUTER JOIN)을 사용해야한다. 실수로 내부 조인을 사용하면 사물함과 관계가 없는 회원은 조회되지 않는다. 그리고 회원과 사물함이 아주 가끔 관계를 맺는다면 외래 키 값 대부분이 null로 저장되는 단점이 있다. ▼ 조인 테이블 사용 조인 테이블이라는 별도의 테이블을 사용해서 연관관계를 관리한다. 조인 컬럼을 사용하는 방법은 단순히 외래키 컬럼만 추가해서 연관관계를 맺지만..
2023.06.13 -
복합 키와 식별 관계 매핑
식별 관계 vs 비식별관계 식별관계 : 부모 테이블의 기본 키를 내려받아서 자식 테이블의 기본 키 + 외래 키로 사용하는 관계 비식별관계 : 부모 테이블의 기본 키를 받아서 자식 테이블의 외래 키로만 사용하는 관계 비식별관계는 외래 키에 NULL을 허용하는지에 따라 필수적 비식별 관계와 선택적 비식별 관계로 나눈다. 필수적 비식별 관계(Mandatory): 외래 키에 NULL을 허용하지 않는다. 연관관계를 필수적으로 맺어야 한다. 선택적 비식별 관계(Optional): 외래 키에 NULL을 허용한다. 연관관계를 맺을지 말지 선택할 수 있다. 복합 키: 비식별 관계 매핑 기본 키를 구성하는 컬럼이 하나면 다음처럼 단순하게 매핑한다. @Entity public class Hello() { @Id privat..
2023.06.08 -
얕은 복사(Spread 연산자), 깊은 복사(JSON.parse()), Rest Parameter
얕은 복사: 주소값까지만 복사함 깊은 복사: 실제 데이터까지 복사함 ※ Spread 연산자(...) → 하나로 뭉쳐져 있는 값들의 집합을 전개해주는 연산자이다. // ex1) let arr = [1, 2, 3, 4, 5]; console.log(arr); // [1, 2, 3, 4, 5] console.log(...arr); // 1, 2, 3, 4, 5 // ex2) let str = "Hello"; console.log(str); // Hello console.log(...str) // H e l l o 참조 타입의 복사 let origin = { name: "otter", age: 25 }; let copy = origin; console.log(origin.name); // "otter" //복사..
2023.05.24