본문 바로가기

spring boot5

프록시(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.
영속성 관리 영속성 컨텍스트엔티티를 영구 저장하는 환경EntityManger.persist(entity);논리적인 개념으로 눈에 보이지 않음엔티티 매니저를 통해서 영속성 컨텍스트에 접근내부에 1차 캐시, 쓰기 지연 SQL 존재 엔티티 생명주기비영속  영속성 컨텍스트와 전혀 관계가 없는 새로운 상태영속  영속성 컨텍스트에 관리되는 상태로 영속성 컨텍스트 안에 객체가 들어간다고 생각  em.persist 이후 바로 데이터베이스 쿼리가 나가는 것이 아닌, commit 순간에 영속성 컨텍스트 안의 객체가 데이터베이스로 날아감준영속  영속성 컨텍스트에서 분리된 상태(detached)  영속성 컨텍스트가 제공하는 기능을 사용 못함(commit 등)  em.detach(entity) : 해당 entity를 준영속 상태로 만듬  .. 2023. 8. 22.