전체 글131 [JPA] 값 타입 🎈 JPA의 데이터 타입 분류 JPA의 데이터 타입 분류는 크게 엔티티 타입과 값 타입 두가지이다. 엔티티 타입 @Entity로 정의하는 객체로 타입들을 PK로 관리하기 때문에 데이터가 변해도 식별자로 지속해서 추적이 가능하다. ex. 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 ex. 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 🎈 기본값 타입 자바 원시 타입(int, double) 래퍼 클래스(Integer, Long) String 기본값 타입의 특징은 생명주기들이 엔티티의 의존하는 것이다. 예를 들면 회원을 삭제하면 이름, 나.. 2023. 4. 22. [JPA] 프록시와 연관관계 관리 프록시 테이블을 조회해서 객체를 가져올 때 연관관계가 맺어진 객체까지 모두 조회하게 된다. 객체를 조회할 때 연관관계가 맺어진 객체는 안 가져오고 싶다면 어떻게 해야 할까? em.find() : 데이터베이스를 통해서 실제 엔티티 객체를 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 -> DB에 SQL은 전송되지 않지만 조회된다. em.find()를 사용하면 호출 시점에 즉시 데이터베이스에 SQL이 전송되지만 em.getReference()을 사용하면 호출 즉시가 아닌 em.getReference()를 통해 가져온 객체를 사용하는 시점에 SQL이 전송된다. User findUser = em.find(User.class, user.getId()); // .. 2023. 4. 19. [JPA] 고급매핑 - 상속관계 매핑, @MappedSuperClass 매핑 정보 상속 상속관계 매핑 객체는 상속관계가 있지만 관계형 데이터 베이스는 상속관계가 없다. DB의 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하다. 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 → 조인 전략 통합 테이블로 변환 → 단일 테이블 전략 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 JPA는 어떠한 전략으로 테이블을 구성했더라도 상속관계 매핑을 지원한다. 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테.. 2023. 4. 18. [JPA] 다양한 연관관계 매핑 - 다대다 다대다 [N:M] 실무에서는 사용하면 안된다. 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야한다. 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계를 만들 수 있다. 그래서 JPA는 연결 테이블을 매핑 시키는 기능을 지원해준다. 다대다 단방향 @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String username; @ManyToOne @JoinColumn(name = "TEAM_ID", insertable = false, updatable = false).. 2023. 4. 14. [JPA] 다양한 연관관계 매핑 - 일대일 일대일[1:1] 일대일 ↔ 일대일 대칭성을 갖는다. 일대일 관계이기 때문에 주 테이블이나 대상 테이블 중에 외래키를 선택하여 넣을 수 있다. 외래키에 데이터베이스 유니크(UNI) 제약조건이 추가되야 사용할 수 있다. 일대일 : 주 테이블에 외래 키 단방향 요구사항 하나의 회원은 하나의 사물함을 가지고 있다. 하나의 사물함은 하나의 회원만 사용할 수 있다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String username; @ManyToOne @JoinColumn(name = "TEAM_ID", insertable = false, up.. 2023. 4. 14. [JPA] 다양한 연관관계 매핑 - 다대일, 일대다 연관관계 매핑 시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 연관 관계는 대칭성을 갖는다. 다대일 ↔ 일대다 일대일 ↔ 일대일 다대다 ↔ 다대다 다중성 어노테이션 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 테이블은 외래 키 하나로 양쪽을 조인할 수 있다. 그렇기 때문에 사실 방향이라는 개념이 없다. 객체 객체는 참조용 필드가 있는 쪽으로만 참조가 가능하다. 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향이라 한다. 사실 객체에는 양방향이 없고 양쪽이 각각 단방향으로 서로를 바라보는 것이다. 이것을 우리는 양방향이라고 부른다. 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연.. 2023. 4. 14. 이전 1 ··· 16 17 18 19 20 21 22 다음