JPA
-
[JPA] 상속관계 매핑프로그래밍/Java 2022. 2. 15. 13:16
상속관계 매핑 객체의 상속의 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 전략 1. 조인 전략 각 테이블로 변환 각각 조인해서 사용 DTYPE으로 구분 2. 단일 테이블 전략 한 테이블로 합쳐서 사용 DTYPE으로 구분 3. 구현 클래스마다 테이블 전략 상위 테이블 없이 슈퍼타입 컬럼을 서브타입 애들이 다 갖고 있음 - extends 사용시 JPA 기본전략은 단일테이블 전략 - 상위 테이블을 추상 클래스로 만들 것 어노테이션 사용 @Inheritance - strategy를 이용하여 전략 선택 가능 @Inheritance(strategy = InheritanceType.JOINED) // 조인전략 @Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 단일 ..
-
[JPA] 연관관계(1:N) 매핑하기프로그래밍/Java 2022. 2. 10. 09:52
연관관계 매핑 (1:N) 외래키가 있는 곳이 주인이다! Team과 Member가 1대다 관계일 때, Member 테이블이 연관관계의 주인이다. (Many To One 중 Many가 연관관계의 주인이다.) 연관관계의 주인은 비즈니스적으로 중요하지 않다. => N이 그냥 주인이 되는 것. 양방향 매핑시 연관관계의 주인에는 꼭! 값을 세팅해야함. // XXXXX Team.getMembers().add(member); // OOOOO member.setTeam(team); 객체지향적으로 보면 양 쪽에 값을 세팅해주는게 맞다. Team.getMembers().add(member); member.setTeam(team); - 연관관계 편의 메소드를 생성하자 // 로직이 들어가면 메소드명을 changeTeam 등으로..
-
[JPA] 지연로딩 & 즉시로딩프로그래밍/Java 2022. 1. 21. 14:17
지연 로딩 객체가 실제 사용될 때 로딩 Member member = meberDAO.find(memberId); // select * from member Team team = member.getTeam(); String teamName = team.getName(); // select * from team 객체가 실제 사용될 때 로딩 필요할 때마다 쿼리문을 이용해 호출 즉시 로딩 (최적화) JOIN SQL로 한번에 연관된 객체까지 미리 조회 Member member = meberDAO.find(memberId); // select m.*, t.* from member join team.. Team team = member.getTeam(); String teamName = team.getName(); ..
-
[JPA] 엔티티 데이터 접근 전략 @Access (feat. 필드접근 vs 프로퍼티 접근)프로그래밍/Java 2021. 12. 28. 13:47
@Access JPA가 엔티티 데이터에 접근하는 방식을 지정한다. 필드 접근 @Access(AccessType.FIELD) - 필드에 직접 접근한다. 필드 접근권한이 private이어도 접근할 수 있다. 프로퍼티 접근 @Access(AccessType.PROPERTY) - 프로퍼티에 접근한다. @Access가 없는 경우 @Access를 설정하지 않으면 @Id의 위치를 기준으로 접근 방식이 설정된다. @Entity @Access(AccessType.FIELD) public class Member { @Id // id가 필드에 있으므로 @Access(AccessType.FIELD) 생략 가능 private String id; } @Entity @Access(AccessType.PROPERTY) public ..
-
[JPA] 영속성 관리 (영속성 컨텍스트란?)프로그래밍/Java 2021. 12. 28. 10:47
영속성 컨텍스트 엔티티를 영구 저장하는 환경. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트는 논리적인 개념에 가깝다. 영속성 컨텍스트는 엔티티 매니저를 생성할 때 하나 만들어진다. ✔️ persist 엔티티를 영속성 컨텍스트에 저장 ✔️ flush 영속성 컨테스트에 저장된 엔티티를 데이터베이스에 반영 엔티티의 생명주기 비영속 / 영속(영속성 컨텍스트에 저장된 상태) / 준영속(영속성 컨텍스트에 저장되었다가 분리된 상태) / 삭제 쓰기 지연 엔티티 매니저는 트랜잭션을 커밋하기 직전까지 데이터베이스에 엔티티를 저장하지 않고, 내부 쿼리 저장소에 INSERT SQL을 모아둔다. 그리고 트랜잭션을 커밋할 때 모아둔 쿼리를 데이터베이스..