카테고리 없음2024. 1. 28. 18:28JPA 값 타입

값 타입은 복잡한 객체를 단순하게 다루기 위한 개념으로 기본 값 타입, 임베디드 타입, 컬렉션 값 타입 세 가지가 있다. 기본 값 타입 엔티티에서 int, String과 같은 기본 타입과 래퍼 클래스이다. 기본 값 타입은 참조가 아니기 때문에 변경 시 깊은 복사로 값만 변경되어 추적이 불가능하다. 참조를 이용하는 값 타입은 변경 시 다른 엔티티의 필드도 바뀔 수 있어서 공유해서는 안되고, 불변 객체여야한다. 하지만 기본 값 타입은 안전하다. 래퍼 클래스는 객체이기 때문에 공유가 가능하지만, 불변 객체이기 때문에 안전하다. 임베디드 타입 새로운 값 타입을 직접 정의할 수 있다 = 엔티티 클래스 내부에 다른 클래스 타입을 가진 필드를 사용할 수 있다 좌표나 주소 같은 비슷한 성격의 필드를 클래스로 분리함으로..

JPA 프록시와 지연로딩
카테고리 없음2024. 1. 28. 18:06JPA 프록시와 지연로딩

프록시 EntityManager에는 getReference()라는 메서드가 있다. find()와 같이 객체를 조회하는 메서드이지만, getReference()는 반환 타입이 Proxy이다. Proxy는 보통 전달하는 역할을 할 때 자주 등장하는 단어인데 여기서도 같은 의미로 사용된다. Proxy 객체는 실제 객체와 같은 모양에 Id 값만 들어있는 빈 객체이다. 프록시 객체를 사용하는 이유 연관관계 매핑에서 객체를 조회하면 연관된 객체도 같이 조회하게 된다. 이때 연관된 객체는 사용하지 않더라도 같이 조회되는 문제가 있다. 이런 문제를 해결하기 위해서 실제 연관객체를 사용하는 시점에 쿼리를 보내 데이터를 넣어주게되고, 연관 객체를 가져오기 전까지는 null이 아닌 빈 껍데기 객체를 넣어두어 NPE도 방지하..

카테고리 없음2024. 1. 28. 14:51JPA 영속성 전이와 고아 객체

영속성 전이 연관관계 매핑에서 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 영속 상태로 만드는 방법이다. 연관관계 어노테이션의 cascade 옵션을 통해 설정할 수 있으며, 연관관계 매핑과는 무관하게 단순히 영속의 편리함을 제공하는 기능이다. Member와 이 cascade 되어있다면, Member가 영속될 때 Team도 같이 영속된다. 즉, Team이 삭제되면 Member도 삭제된다. 편리한 기능이지만, 안전성을 위해 REMOVE는 지양하고, PERSIST와 ALL 옵션을 권장한다. 고아 객체 고아 객체란 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 뜻하며, 자동으로 삭제된다. 예를 들어 Team의 MemberList에서 Member를 삭제하면 삭제된 Member 객체는 고아 객체가 되며 de..

JPA 엔티티 매핑
카테고리 없음2024. 1. 27. 23:28JPA 엔티티 매핑

영속성 컨텍스트는 모든 객체가 아닌 DB 테이블과 연결되는 객체인 엔티티만 관리한다. 오늘은 엔티티를 사용하는 방법과 Spring을 사용하지 않고 순수 자바에서의 JPA 세팅 방법에 대해 정리해보겠다. JPA 세팅 Hibernate Dependency 원하는 버전의 JPA 의존성을 추가해준다. META-INF 폴더 하위에 persistence.xml을 생성해서 하이버네이트 설정을 적용할 수 있다. 이때 설정 정보에 있는 persistence-unit의 name을 통해 EntityManagerFactory 생성 시 적용할 persistence 설정을 주입할 수 있다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); 스키..

image