woowacourse-study / 2022-jpa-study

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

[섹션 4, 섹션 5] 로마 제출합니다 #10

Closed kbsat closed 2 years ago

kbsat commented 2 years ago

엔티티 매핑

객체와 테이블 매핑

@Entity

@Table

스키마 자동 생성

DDL 생성기능

필드와 컬럼 매핑

기본키 매핑

기본키 매핑 전략

@Entity
public class Member {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
@Entity
@SequenceGenerator(
                  name = “MEMBER_SEQ_GENERATOR",
                  sequenceName = “MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
                  initialValue = 1, allocationSize = 1)
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MEMBER_SEQ_GENERATOR")
    private Long id;

연관관계 매핑

단방향 연관관계

양방향 연관관계

양방향 연관관계에서 자주하는 실수

실수 1. 연관관계의 주인에 값을 입력하지 않고 역방향에 값을 입력

Team team = new Team();
team.setName("TeamA");
em.persist(team);

Member member = new Member();
member.setName("member1");

**//역방향(주인이 아닌 방향)만 연관관계 설정
team.getMembers().add(member);**

em.persist(member);

Team team = new Team(); team.setName("TeamA"); //연관관계 주인에 값을 설정 member.setTeam(team); em.persist(team);

- 이러면 잘 들어감
- 객체지향적으로 생각해보면 객체 양쪽에 값을 넣어주는 것이 바람직하다.
- 연관관계 편의 메서드를 생성하자 ( 둘다 삽입하는 것을 까먹기 때문에 `changeTeam(Team team)` 같은 메서드를 정의해 안에서 두 작업을 다 해준다 )
```java
public void changeTeam(Team team){ 
        this.team = team;
        team.getMembers().add(this);
}

실수 2. 무한 루프를 조심하자

👉 lombok의 toString() 만드는 것은 쓰지 마라. 쓰려면 이런 내용은 빼고 써라. 👉 컨트롤러에는 Entity를 절대 반환하지 마라. 엔티티를 API로 반환하지 마라.

양방향 매핑 정리