본문 바로가기

전체 글333

JPA - 값 타입 - 요구사항 분석과 맵핑5 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 값 타입 사용 이전에 사용했던 UML 다이어그램을 잠시 살펴보자. 위의 다이어그램에서 Member 와 Delivery 엔티티에 city, street, zipcode 속성을 주소로 맵핑해보자. 우선 Address 값 타입을 선언해보자. @Embeddable public class Address { private String city; private String street; private String zipcode; @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((city == null) ? 0 : city.hashCode().. 2021. 7. 27.
JPA - 값 타입 - 값 타입 컬렉션 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 값 타입 컬렉션 회원에서 좋아하는 음식들과 주소 내역들을 참조하고 있다고 하면 이런 값 타입을 2 개 이상 저장하기 위해서는 컬렉션에 보관해야 한다. JPA 에서는 값 타입 컬렉션을 맵핑할 수 있는 @ElementCollection 과 @CollectionTable 어노테이션을 제공한다. @Entity public class Member { @Id @Column(name = "USER_ID") private String id; @ElementCollection @CollectionTable(name = "FAVORITE_FOODS", joinColumns = @JoinColumn(name = "USER_ID")) @Column(name = "FOOD_NA.. 2021. 7. 25.
JPA - 값 타입 - 불변객체 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 불변객체 값 타입을 여러 엔티티에서 공유해서 사용하면 위험하다. public static void save(EntityManager em) { EntityTransaction tx = em.getTransaction(); tx.begin(); Member member1 = new Member(); member1.setId("User#1"); Address companyAddr = new Address(); companyAddr.setCity("City#1"); companyAddr.setStreet("Street#1"); member1.setCompanyAddress(companyAddr); em.persist(member1); Member member2.. 2021. 7. 22.
JPA - 값 타입 - 임베디드 타입 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 값 타입 JPA 의 데이터 타입을 분류하면 엔티티 타입과 값 타입이 있다. 엔티티 타입은 @Entity 어노테이션으로 정의했던 객체들이고, 값 타입은 int, String 등 기본 타입이나 값으로 사용하는 객체를 말한다. 엔티티는 식별자가 있다. 우리는 어떤 사람이 자라면서 키나 몸무게가 달라진다고해서 그 사람을 다른사람이라고 인식하지 않는다. 반면 값은 100 에서 200 으로 변하면 완전히 다른 값이 된다. 이는 DDD에서 Value Object 와 Entity 를 구분하는 내용에도 등장하는 개념이므로 헷갈린다면 이번 기회에 이해해두도록 하자. - 기본값 타입 @Entity public class Member extends DateMarkable{ @.. 2021. 7. 20.
JPA - 고급맵핑 - 요구사항 분석과 맵핑4 - 참조: 자바 ORM 표준 JPA 프로그래밍 - Fetch 설정 기억을 되살리기 위해 우리가 요구사항 분석과 맵핑3 까지 작성했던 UML 을 다시 한번 살펴보자. 클래스 간의 연관관계의 다중성을 JPA 코드로 작성할 때 별다른 Fetch 전략을 작성하지 않았었다. 만약 Project 팀에서 기본 전략을 지연 로딩으로 설정하기로 합의했다면 Fetch 를 설정해줘야 한다. Default 설정으로 @OneToMany, @ManyToMany 는 지연 로딩으로 설정되어있으므로 @OneToOne, @ManyToOne 을 설정해주자. 주문(Order) 와 주문 상품(Order Item) 의 @OneToOne, @ManyToOne 이 대상이다. @Entity @Table(name = "ORDERS") public c.. 2021. 7. 18.
JPA - 영속성 전이와 고아 객체 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 영속성 전이: CASCADE 여태까지 예제를 수행할 때 부모 와 자식 엔티티 연관에서 한 가지 불편한 점이 있었을것이다. Parent 가 Child 엔티티를 참조하는 상황에서 Parent 와 Child 가 모두 영속된 상태여야 연관관계가 맵핑됐었다. JPA 에서는 특정 엔티티를 영속 상태로 만들 때 CASCADE 옵션으로 연관된 엔티티도 함께 영속 상태로 만들어주는 영속성 전이 기능을 제공한다. @Entity public class Parent{ @Id @GeneratedValue @Column(name = "PARENT_ID") private Long id; private String name; @OneToMany(mappedBy = "parent") .. 2021. 7. 17.