본문 바로가기

Java/Spring Data Jpa14

즉시로딩, 지연로딩 즉시로딩데이터를 조회할 때 연관된 모든 객체의 데이터까지 한번에 불러오는 것(fetch = FetchType.EAGER)프록시를 가져오지 않고 실제 엔티티를 가져옴// Member와 Team이 N:1public class Member {...@ManyToOne(fetch = FetchType.EAGER) // 즉시로딩@JoinColumn(name = "TEAM_ID")private Team team;...}Team team = new Team();team.setName("teamA");em.persist(team);Member member1 = new Member();member1.setUserName("member1");member1.setTeam(team);em.persist(member1);em.f.. 2023. 12. 23.
프록시(Proxy) 프록시실제 클래스를 상속받아서 만들어짐(클래스와 겉모양이 같음)em.find()데이터베이스를 통해서 실제 엔티티 객체 조회em.getReference()데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회그러나 해당 객체를 사용할 때는 쿼리가 나감Entity target = null 프록시 초기화프록시에 값이 없을 때(target = null) 영속성 컨텍스트를 통해 진짜 값을 요청 후 가지고 있음초기화 여부 확인(true, false) : PersistenceUnitUtil().isLoaded(Object entity)조회 등 쿼리가 나감(초기화 이후에는 X, 영속성 컨텍스트를 통해 가져옴)프록시 강제 초기화org.hibernate.Hibernate.initialize(entity)강제 호출 (m.. 2023. 12. 20.
MappedSuperclass MappedSuperclass@MappedSuperclass공통 매핑 정보가 필요할 때 사용상속관계 매핑이 아님엔티티가 아니므로 테이블과 매핑 불가부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공조회, 검색 불가추상 클래스 권장테이블과 관계가 없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할주로 ADD_DATE, ADD_TIME, CHANGE_DATE, CHANGE_TIME 등과 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용null 허용@MappedSuperclasspublic class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String last.. 2023. 12. 20.
상속관계 매핑 상속관계 매핑관계형 데이터베이스는 상속관계 X슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑주요 어노테이션@Inheritance(strategy = InheritanceType.xxx)@DiscriminatorColumn(name = "DTYPE")@DiscriminatorValue("xxx")조인 전략@Inheritance(strategy = InheritanceType.JOINED)부모 테이블, 자식 테이블로 나눈 뒤 SELECT 시 조인 사용(각각 테이블로 변환)@Inheritance(strategy = InheritanceType.JOINED) 사용장점테이블 정규화외래키 참조 무결성 제약조건 활용가능저장공간 효율화단점조회 시 조인.. 2023. 12. 20.
연관관계 매핑 객체 연관관계 (2개)회원 -> 팀 연관관계 1개(단방향)팀 -> 회원 연관관계 1개(단방향)객체의 양방향 관계는 서로 다른 단방향 관계 2개객체는 참조를 사용해서 연관된 객체를 찾음객체를 양방향으로 참조하려면 단방향 연관관계 2개를 만들어야 함테이블 연관관계 (1개)회원 팀 연관관계 1개(양방향)테이블 양방향 연관관계는 외래키 하나로 두 테이블의 연관관계를 관리테이블은 외래키로 조인을 사용해서 연관된 테이블을 찾음단방향@ManyToOne : 해당 클래스가 N, 연관된 클래스가 1양방향@OneToMany(mappedBy = "연결된 엔티티의 연결된 변수명")mappedBy : 나는 매핑이 되었다는 뜻으로 주인인이 아님을 명시연관관계 주인객체 양방향 연관관계는 관리 주인이 필요객체의 두 관계 중 하나를 .. 2023. 12. 19.
엔티티 매핑 @Entity엔티티 : DB 테이블에 대응하는 하나의 클래스해당 어노테이션이 붙은 클래스는 JPA가 관리하는 엔티티주의 사항기본 생성자 필수(public, protected)final 클래스, enum, interface, inner 클래스에 사용 불가저장할 필드에 final 사용 불가@Table엔티티와 매핑할 테이블 지정@Table(name = "테이블 명") : 기본은 클래스 명과 동일@Column클래스 내의 필드와 테이블 컬럼 매핑@Column(name = "테이블에서 매핑될 컬럼 명")속성name : 필드와 매핑할 테이블의 컬럼 이름insertable, updatable : 등록, 변경 가능 여부 (default : true)nullable : null 값 허용 여부 (default : false.. 2023. 8. 25.