본문 바로가기

분류 전체보기46

임베디드 타입 임베디드 타입(복합 값 타입) 새로운 값 타입을 직접 정의할 수 있음 주로 기본 값 타입을 모아서 만들기때문에 복합 값 타입이라고도 함 @Embeddable : 값 타입을 정의하는 곳에 표시 @Embedded : 값 타입을 사용하는 곳에 표시 기본 생성자 필수 import javax.persistence.Embeddable; import java.time.LocalDateTime; @Embeddable public class Period { //기간 private LocalDateTime startDate; private LocalDateTime endDate; public Period() { } public Period(LocalDateTime startDate, LocalDateTime endDate.. 2023. 12. 30.
영속성 전이 영속성 전이(CASCADE) 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함 제공(부모 엔티티 저장 시 자식 엔티티도 함께 저장) 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없음 종류 ALL : 모두 적용 PERSIST : 영속 REMOVE : 삭제 MERGE : 병합 REFRESH : refresh DETACH : detach @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) // .. 2023. 12. 29.
즉시로딩, 지연로딩 즉시로딩 데이터를 조회할 때 연관된 모든 객체의 데이터까지 한번에 불러오는 것 (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.