예시이다. 객체를 사용하는데 계속 id,name이 모든 클래스 안에 반복적으로 들어간다. 이걸 공통으로 쓸 수는 없을까? package jpabook.jpashop.domain; import javax.persistence.Entity; import javax.persistence.MappedSuperclass; import java.time.LocalDateTime; @MappedSuperclass public class BaseEntity { private String createBy; private LocalDateTime createDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; public String ge..
상속관계 매핑 - 관계형 데이터베이스는 상속 관계x - 슈퍼타입 서브타입 관계라는 모델링 기법이 상속과 유사 - 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 - 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법이 있다. ㄴ 각각 테이블로 변환 -> 조인 전략 ㄴ 통합 테이블로 변환 -> 단일 테이블 전략 ㄴ 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 1. Item class package jpabook.jpashop.domain; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Item { @Id @GeneratedV..
** 실무에서는 쓰면 안된다. 다대다 - 관계형 데이터 베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없음 - 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야함 - 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계 가능 @ManyToMany Member class @ManyToMany @JoinTable(name = "MEMBER_PRODUCT") private List products = new ArrayList(); Product class @ManyToMany(mappedBy = "products") private List members = new ArrayList(); 한계 - 편리해 보이지만 실무에서 사용x - 연결 테이블이 단순히 연결만 하고 끝나지 않음 - 주문시간, 수량 ..
일대일 관계는 그 반대도 일대일 - 주 테이블이나 대상 테이블 중에 외래 키 선택 가능 - 주 테이블에 외래 키 - 대상 테이블에 외래 키 - 외래 키에 데이터베이스 유니크(UNI) 제약조건 추가 Locker @OneToOne(mappedBy = "locker") private Member member; Member @OneToOne @JoinColumn(name = "LOCKER_ID") private Locker locker; 일대일 : 주 테이블에 외래 키 양방향 정리 - 다대일 양방향 매핑처럼 외래 키가 있는 곳이 연관관계의 주인 - 반대편은 mappedBy 적용 - 단방향 관계는 JPA 지원 X - 양방향 관계는 지원 일대일 정리 - 주 테이블에 외래 키 ㄴ 주객체가 대상 객체의 참조를 가지는 ..
다중성 - 다대일 : @ManyToOne - 일대다 : @OneToMany - 일대일 : @OneToOne - 다대다 : @ManyToMany ㄴ 다대다는 실무에서는 사용하면 안된다 테이블 - 외래 키 하나로 양쪽 조인 가능 - 사실 방향이라는 개념이 없음 객체 - 참조용 필드가 있는 쪽으로만 참조 가능 - 한쪽만 참조하면 단 방향 - 양쪽이 서로 참조하면 양방향 연관관계의 주인 - 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 - 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 - 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래키를 관리할 곳을 지정해야 함 - 연관관계의 주인: 외래 키를 관리하는 참조 - 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회만 한다...
연관관계의 주인에 값을 입력하지 않음 Member member = new Member(); member.setUsername("member1"); em.persist(member); Team team = new Team(); team.setName("TeamA"); team.getMembers().add(member); em.persist(team); 이렇게 주인쪽으로 저장해주지 않으면 저장안됌 Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); member.setTeam(team); em.persist(member); em.flus..
위의 테이블 연관관계를 보면 MEMBER에서 TEAM_ID를 가지고 있기에 MEMBER에서는 TEAM을 알 수 있다. 하지만 TEAM에서는 당연하게 MEMBER_ID가 없다. 원래 대로라면 다대일 관계이기에 TEAM이 갖고있는 MEMBER들을 얻기 위해서는 MEMBER에서 TEAM을 조회해야만 알 수 있다. 양방향 객체 연관관계를 보면 TEAM은 MEMBER LIST를 가지고 있는 것으로 된다. 객체지향 관점으로 봤을 때에는 TEAM은 여러 멤버들이 속해 있기 때문이다. member @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; team @OneToMany(mappedBy = "team") //mappedBy는 나는 무엇과 연결되어있지? 라면 Me..
해당 테이블 같을 때에 멤버가 팀에 소속되긱에 멤버(N) : 팀(1)의 관계가 된다. 객체관계에서는 TEAM_ID를 가지고 있는 것은 객체지향스럽지 않다고 한다. TEAM 객체 자체를 가지고 있어야한다. TABLE 관점에서는 TEAM_ID를 가지고 있는 것이 맞다. MEMBER 객체 안에 TEAM_ID가 아닌 TEAM 자체를 넣어준다. @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; MEMBER가 N이기 떄문에 @MantToOne 관계라는 것을 어노테이션해준 뒤 DB에게 알려줄 JoinColumn을 알려준다. 이건 내가 team을 찾기 위해 필요했던 FK를 생각하면 된다. Team team = new Team(); team.setName("TeamA..
- Total
- Today
- Yesterday
- 백엔드 개발자 역량
- ArgumentResolver
- hypertexttransferprotocol
- react실행
- rejectValue
- 향해플러스
- 리터럴
- BindingResult
- 컨트
- Java
- 항해플러스
- 예외처리
- React
- 로그인
- exception
- 스프링공부
- thymleaf
- reject
- 항해99
- 향해99
- JPA
- jpa api
- 향해플러스백엔드
- SpringBoot
- filter
- 인터셉터
- 스프링부트
- 백엔드 개발자 공부
- HTTP
- Intercepter
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 |