값 타입?엔티티의 상태를 표현하는 데 사용되는 데이터일반적으로 불변의 상태를 가짐부작용을 방지하고 보다 안전한 프로그래밍이 가능함보통 숫자, 날짜 , 복합 값을 포함값 타입 공유 참조 문제임베디드 타입 등의 값 타입이 여러 엔티티 간에 공유되는 경우 문제가 발생함예시두 개의 회원 엔티티가 동일한 주소의 인스턴스를 참조하는 경우한 회원의 주소가 변경되면 참조를 공유하는 다른 회원의 주소도 영향문제 예시member1.setHomeAddress(new Address("OldCity")); Address address = member1.getHomeAddress(); address.setCity("NewCity"); // 회원1의 주소 값을 공유해서 사용 member2.setHomeAddress(address)..
@Test public void valueTypeCollection() { Member member = new Member(); // 임베디드 값 타입 member.setHomeAddress(new Address("통영", "몽돌해수욕장", "660-123")); // 기본갑 타입 컬렉션 member .getFavoriteFoods() .add("짬뽕"); member .getFavoriteFoods() .add("짜장"); member .getFavoriteFoods() .add("탕수육"); // 임베디드 값 타입 컬렉션 member .getAddressHistory() .add(new Address("서울", "강남", "123-123")); member .getAddressHistory() .ad..
@Entity public class Member { @Id @GeneratedValue private Long id; @Embedded private Address homeAddress; // 문자열 집합을 테이블로 매핑 @ElementCollection @CollectionTable(name="FAVORITE_FOODS", joinColumns=@JoinColumn(name = "MEMBER_ID")) @Column(name="FOOD_NAME") private Set favoriteFoods = new HashSet(); // 임베디드 타입의 컬렉션을 테이블로 매핑 @ElementCollection @CollectionTable(name = "ADDRESS", joinColumns=@JoinColu..
값 타입 켈력선의 이해와 제약사항값 타입 컬렉션은 엔티티와 다르게 식별자를 가지지 않음.값 타입은 데이터 변경시 원본 데이터를 찾기가 힘듭니다.값 타입 컬렉션이 테이블에 저장되는 경우값의 변경이 있는 경우 원본 데이터를 갱신하기 힘들기에JPA 구현체는 값 변경이 있는 경우변경된 데이터를 삭제하고 다시 저장함실무에서의 값 타입 컬렉션 사용성능 문제로 인해 일대다 관계를 고려해야함또는 엔티티로 그냥 사용하는 방법도 있음값 타입 컬렉션의 대안값 타입 컬렉션을 사용하는 것이 성능상에 문제가 있는 경우새로운 엔티티를 생성하여 일대다 관계로 설정하는 것이 한 가지 해결책@Entity @Setter @Getter public class Member { @Id @GeneratedValue(strategy = Gener..
식별자로 조회EntityManager.find() 사용정의데이터베이스에서 엔티티를 식별자(ID)를 사용하여 조회하는 가장 기본적인 방법엔티티 객체를 시작점으로 객체 그래프 탐색을 통해 관련됨 다른 엔티티들에 접근코드// EntityManager를 사용하여 ID로 엔티티 조회 MyEntity entity = entityManager.find(MyEntity.class, entityId);객체 그래프 탐색객체를 통해 연관된 다른 객체로 이동하는 것a.getB() getC() 같은 연쇄 호출을 통해 객체 접근// 객체 그래프 탐색을 통한 연관 엔티티 탐색 Address address = member.getAddress(); City city = address.getCity();복잡한 검색 요구 + JPQL설명..
정의JPA 를 사용하여 엔티티 객체를 조회하기 위한 객체지향 쿼리언어SQL 과 추상화DB의 테이블과 컬럼이 아닌 엔티티와 그 속성을 대상으로 쿼리를 작성함특정 DB에 의존 X데이터베이스 방언을 변경하는 것만으로 다른 DB로의 이전이 가능코드 간결성엔티티 직접 조회묵시적 조인다형성 지원 등의 장점@Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "NAME", nullable = false) private String name;테스트 코드@Autowired private EntityManager em; @BeforeEach void setUp() { Member member = new Member(); membe..