코딩과 결혼합니다

[영화 예매 웹사이트] Spring Boot / Entity 생성과 연관 관계 설정 본문

코딩과 매일매일♥/영화예매

[영화 예매 웹사이트] Spring Boot / Entity 생성과 연관 관계 설정

코딩러버 2024. 6. 13. 00:41
728x90

User - Profile (종속 관계)

@Entity
public class User {

    @Id
    private String userId;
    private String password;
    private Date birthDate;
    private Tier membershipTier;

    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    Profile profile;
}
@Entity
public class Profile {
    @Id
    private String userId;

    @MapsId
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    User user;

    private String name;
    private Integer accumulatedAmount;
    private Tier membershipTier;
    private Tier nextMonthTier;
}

 

양방향 관계 설정

  • Profile 엔티티와 User 엔티티는 같은 'userId'를 사용한다.
  • @MapsId를 통해 Profile의 ID가 User의 ID와 매핑된다.
  • casscadeType.ALL 추가 : User의 엔티티 변경이 Profile 엔티티에도 전파되도록 설정한다.
  • 양쪽에 지연로딩을 걸어주어 필요할 때에만 로드되게 하여 성능적으로 최적화한다.
  • 이 둘은 강하게 연결되어 있기 때문에 User가 없는 상황에서 Profile이 단독으로 생성될 수 없다.

성능적으로 효율

  • ID를 동일하게 설정으로 프로필 조회 시 추가적인 조인 없이 User의 ID를 사용할 수 있어 DB 접근 성능 향상
  • 두 엔티티가 일대일 관계를 유지하면서도 데이터 일관성을 보장

🤔단방향 @ManyToOne에서 LAZY를 걸어줘야 하나?


** SQL 구문 오류 - row 예약어 사용
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'row varchar(255),

 

필드로 row를 쓰려 했는데 예약어 사용으로 구문 오류가 일어났다.

➡️ row_num으로 변경