woowacourse-study / 2022-jpa-study

🔥 우아한테크코스 4기 JPA 스터디 (22.06.13~22.07.02) 🔥
5 stars 1 forks source link

[섹션 4, 섹션 5] 루키 제출합니다 #7

Closed wishoon closed 2 years ago

wishoon commented 2 years ago

객체와 테이블 매핑

@Entity

주의

  • 기본 생성자 필수
  • JPA가 동적으로 무언가를 하거나, 리플랙션과 같이 객체를 프록시 하기 위해서는 기본 생성자가 필요하기 때문
  • final 클래스, enum, interface, inner 클래스에는 사용 불가
  • 저장할 필드에 final 사용이 불가

데이터베이스 스키마 자동 생성

주의

  • 테스트 서버는 update or validate
  • 스테이징, 운영 서버는 validate or none

🚨 경고

ALTER을 잘못 적용할 경우 대장애가 발생할 가능성이 있다. (ex. 데이터베이스 Lock) 가급적 개발자가 직접 스크립트를 테스트 서버에서 적용해보고 확인 후, 운영 서버에 직접 적용하는 방법이 좋다. 또한, 이런 사고를 방지하기 위해 DB 계정별로 권한을 두어 사전에 방지하는 것이 좋다.

DDL 생성 기능

필드와 컬럼 매핑

기본 키 매핑 방법

권장하는 식별자 전략

  • 기본 키 제약 조건 : null 아님, 유일, 변화면 안된다.
  • 비즈니스 키를 식별자로 끌고 오면 안된다.


연관관계 매핑기초

단방향 연관관계

양방향 연관관계

연관관계의 주인과 mappedBy

양방향 매핑시 가장 많이 하는 실수

주의

  • 위의 코드는 버그의 요소가 존재함
```java
Team teamA = new Team("teamA");
em.persist(teamA);
Team teamB = new Team("teamB");
em.persist(teamB);

Member member = new Member("member1");
member.addTeam(teamA);
em.persist(member);

member.changeTeam(teamA);
member.changeTeam(teamB);

Member findMember = teamA.getMember();
```

- `Member findMember = teamA.getMember()`를 하면 여전히 `member1` 이 조회됨

양방향 매핑 정리