본문 바로가기

spring boot7

즉시로딩, 지연로딩 즉시로딩 데이터를 조회할 때 연관된 모든 객체의 데이터까지 한번에 불러오는 것 (fetch = FetchType.EAGER) 프록시를 가져오지 않고 실제 엔티티를 가져옴 // Member와 Team이 N:1 public 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.per.. 2023. 12. 23.
프록시(Proxy) 프록시 실제 클래스를 상속받아서 만들어짐(클래스와 겉모양이 같음) em.find() 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference() 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 그러나 해당 객체를 사용할 때는 쿼리가 나감 Entity target = null 프록시 초기화 프록시에 값이 없을 때(target = null) 영속성 컨텍스트를 통해 진짜 값을 요청 후 가지고 있음 초기화 여부 확인(true, false) : PersistenceUnitUtil().isLoaded(Object entity) 조회 등 쿼리가 나감(초기화 이후에는 X, 영속성 컨텍스트를 통해 가져옴) 프록시 강제 초기화 org.hibernate.Hibernate.initialize(ent.. 2023. 12. 20.
MappedSuperclass MappedSuperclass @MappedSuperclass 공통 매핑 정보가 필요할 때 사용 상속관계 매핑이 아님 엔티티가 아니므로 테이블과 매핑 불가 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공 조회, 검색 불가 추상 클래스 권장 테이블과 관계가 없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할 주로 ADD_DATE, ADD_TIME, CHANGE_DATE, CHANGE_TIME 등과 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용 null 허용 @MappedSuperclass public class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String l.. 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 값 허용 여부.. 2023. 8. 25.