일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |
- 스프링 핵심 원리
- 스프링 핵심 기능
- springdatajpa
- QueryDSL
- SpringBoot
- 김영한
- Exception
- db
- JPQL
- jpa
- 자바
- 백준
- kotlin
- JDBC
- transaction
- Spring Boot
- AOP
- Thymeleaf
- Servlet
- http
- spring
- Proxy
- 알고리즘
- java
- Android
- 그리디
- pointcut
- Greedy
- 스프링
- 인프런
- Today
- Total
목록연관관계 (10)
개발자되기 프로젝트
1. 현상 댓글이 있는 글을 삭제하려고 시도하면 에러가 발생한다. Referential integrity constraint violation 예외가 발생한다. Referential integrity constraint violations는 참조 무결성 제약조건 위반을 말한다. Comment(N)와 Post(1)의 연관관계는 Comment가 연관관계의 주인이다. 따라서 COMMENT에서 POST의 PK를 FK로 가지고 있다. log를 보면 FK에서 문제가 발생했고, 해당 예외는 FK를 참조할 수가 없어서 발생한 문제이다. 현제 Post 삭제 로직은 post(1)만 삭제하지 연관관계에 있는 coment(N)를 삭제하지 않는다. 따라서 comment입장에서는 post가 삭제되면 가지고 있는 FK로 참조할 데..
1. 도메인 모델 회원과 게시글의 관계 : 양방향 일대다 한 회원은 여러 게시물 작성 가능 게시글에서 작상한 회원 참조 필요. 회원과 댓글의 관계 :양방향 일대다 한 회원은 여러 댓글 작성 가능 댓글에서 작성한 회원 참조 필요. 게시글과 댓글의 관계 : 양방향 일대다 한 게시글에 여러 댓글 가능. 댓글 작성된 게시글 참조 필요. 2. Entity 분석 Comment: 대댓글 기능을 위해 Parent, Chield로 부모자식 comment를 연결. 3. 테이블 분석, 설계 Comment child 입장에서 "다"측인 parent의 PK를 FK로 가지고 있어야 함. 4. 연관관계 매핑. 4.1 MemberClass @Entity @Getter public class Member { @Id @Column(na..
1. 임베디드 타입 새로운 값 타입을 직접 정의할 수 있음 JPA는 embedded type이라고 함 주로 기본 값 타입을 "모아서" 만들기 때문에 복합 값 타입이라고 함. int String과 같은 값 타입임! 2. 예시 회원 엔티티는 이름, 근무 시작일, 근무 종료일, 주소 도시, 주소 번지, 주소 우편번호를 가진다. 흠.. 공통적인 요소들이 있는데... 묶어보자. 회원 엔티티는 이름, 근무기간, 주소를 가진다. 이처럼 묶어낼 수 있는게 임베디드 타입임. Member의 구성 즉, Period, Address라는 클래스를 생성해서 값 타입으로 씀 3. 임베디드 타입 사용 방법 @Embeddable : 값 타입을 정의하는 곳에 사용 @Embedded : 값 타입을 사용하는 곳에 표시 기본생성자 필수~~ ..
1. 다대다 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계 표현이 안됨!!!!! 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야함. 그런데??? 객체는 컬렉션을 사용해서 객체 2개로 다대다 가능 ㅋㅋㅋㅋ 2. 다대다 특징 @ManyToMany사용 @JoinTable로 연결 테이블 지정 단방향 , 양방향 가능 Member -> Product @ManyToMany @JoinTable(name = "MEMBER_PRODUCT") private List products = new ArrayList(); Product -> Member @ManyToMany(mappedBy = "products") private List members = new ArrayList(); 3. 다대다 한계 편리해 ..
1. 일대일 관계 일대일 관계는 당연히 반대도 일대일 주 테이블이나 대상 테이블 중에 외래 키 선택 가능 주 테이블에 외래 키 대상 테이블에 외래 키 외래 키 데이터베이스 유니크(UNI) 제약조건 추가된 것이 일대일 관계 2. 주 테이블에 외래 키 단방향 다대일 단방향 매핑과 유사 Member -> Locker @OneToOne @JoinColumn(name = "LOCKIER_ID") private Locker locker; 3. 주 테이블에 외래키 양방향 Member가 주인! Member -> Locker @OneToOne @JoinColumn(name = "LOCKIER_ID") private Locker locker; Locker -> Member @OneToOne(mappedBy = "loc..
1. 일대다 단방향 매핑. "일"이 연관관계 주인.? 이 모델은 권장하진 않음.. 표준에서 지원하긴 함. Team에서 Member를 참조하나 Member는 Team을 참조하지 않음.. 하지만 DB입장에서 FK는 MEMBER("다")에 있음 즉, Team의 members를 변경했을 때, MEMBER 테이블의 TEAM_ID(FK)를 변경해야함. -> 다른 테이블의 FK를 업데이트를 해야함.. 2. TEST @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; @OneToMany @JoinColumn(name = "TEAM_ID") private List membe..
1. 엔티티 클래스 개발 시 주의사항(Getter, Setter), 참고 이론적으로 Getter, Setter 모두 제공하지 않고, 꼭 필요한 별도의 메서드를 제공하는게 가장 이상적. Getter의 경우 모두 열어두는 것이 편리하다. Getter는 아무리 호출해도 호출 해도 값이 변하거나 무슨 일이 일어나지 않는다. 하지만 Setter를 호출하면 데이터가 변한다. Setter를 막 열어두면 엔티티가 왜? 변경되는지 추적하기 어려움 그래서 엔티티를 변경할 때는 Setter 대신에 변경 지점이 명확 하도록 변경을 위한 비즈니스 메서드를 별도로 제공해야 한다 테이블은 관례상 테이블명+id로 사용함. 그래서 column(name="필드명_id")로 했음. 2. 일대다, 다대일 many측에 FK가 있음. many..
1. 도메인 모델 회원과 주문의 관계 : 1 대 N 주문과 배송의 관계 : 1 대 1 카테고리와 상품의 관계 : N 대 N 주문과 상품의 관계 : N 대 N - 그러나 다대다 관계는 관계형 DB, entity에서도 사용하지 않음 - 1 대 N 관계로 풀기 위한 중간에 주문 상품이 존재. 상품을 도서 음반 영화 각각 상속 받음. 2. 엔티티 분석 Member : id(PK), 이름, 입베디드 타입인 Address, Order List를 가진다. Order : 한 번 주문 시 여러 상품 주문 가능함. 따라서 Order와 OrderItem을 일대다 관계. Order는 Item을 주문한 회원과 배송 정보, 주문 날짜, 주문 상태를 가지고 있다. 주문 상태는 열거형을 사용 --> 주문(Order), 취소(CANC..