나를 기록하다
article thumbnail
[TIL-10 / 230628] JPA 값 타입(임베디드 타입, 값 타입 컬렉션)
TIL 2023. 6. 28. 23:24

1. 기본값 타입 1) JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 2) 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 예) String name, int age 생명주기를 엔티티에 의존 회원을 삭제하면 이름, 나이 필드도 함께 삭제 값 타입은 공유하면 안된다. 회원 이름 변경시 다른 회원의 이름..

article thumbnail
[TIL-9 / 230627] 프록시 - 즉시로딩과 지연로딩, 고아 객체
TIL 2023. 6. 27. 22:12

2. 즉시 로딩과 지연 로딩 단순히 member 정보만 사용하는 비즈니스 로직 member 클래스 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; → 멤버 클래스만 db에서 조회한다는 뜻 JpaMain Member m = em.find(Member.class, member1.getId()); 결과 Hibernate: select member0_.MEMBER_ID as MEMBER_I1_3_0_, member0_.INSERT_MEMBER as INSERT_M2_3_0_, member0_.createdDate as createdD3_3_0_, member0_.UPDATE_MEMBER as UPDATE_M4_..

article thumbnail
[TIL-8 / 230623] JPA 프록시
TIL 2023. 6. 24. 15:23

1. 프록시 Member를 조회할 때 Team도 함께 조회해야 할까? 회원과 팀 함께 출력 public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("소속팀: " + team.getName()); } 회원만 출력 public void printUser(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.ge..

article thumbnail
[TIL-7 / 230622] JPA 다양한 연관관계 매핑과 고급매핑
TIL 2023. 6. 23. 11:58

5. 다대다 [N : N] 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없음. 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야함 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계 가능 사용방법 @ManyToMany 사용 @JoinTable로 연결 테이블 지정 다대다 매핑: 단방향, 양방향 가능 다대다 매핑의 한계 편리해보이지만 실무에서 사용X 연결 테이블이 단순히 연결만 하고 끝나지 않음 주문시간, 수량 같은 데이터가 들어올 수 있음 다대다 한계 극복 연결 테이블용 엔티티 추가(연결 테이블을 엔티티로 승격) @ManyToMany → @OneToMany, @ManyToOne 6. 실전 예제 - 3. 다양한 연관관계 매핑 배송, 카테고리 추가 - 엔티티 주문과 배송은 1:1(..

article thumbnail
[TIL-6 / 230621] JPA 다양한 연관관계 매핑
TIL 2023. 6. 21. 22:35

1. 연관관계 매핑시 고려사항 3가지 1) 다중성 다대일: @ManyToOne (가장 많이 사용) 일대다: @OneToMany (필요할 때 사용) 일대일: @OneToOne (가끔 사용) 다대다: @ManyToMany (실무에서 사용하지 않음) JPA의 어노테이션은 DB와 매핑하기 위해 존재. 애매할 때는 반대쪽을 생각하라. 회원과 팀의 관계가 헷갈리면, 팀과 회원의 관계를 생각하라. 2) 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 3) 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A→B, B→A 처럼 참조가 2군데 존재 객..

article thumbnail
[TIL-5 / 230620] JPA 연관관계 매핑 기초, 연관관계의 주인
TIL 2023. 6. 20. 23:09

연관관계 매핑 기초 객체의 참조와 테이블의 외래 키를 매핑 용어 이해 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인이 필요 1. 연관관계가 필요한 이유 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 테블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. 테이블과 객체 사이에는 이런 큰 간격이 있다. Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member..

profile on loading

Loading...