프로젝트에 알림 기능을 추가하면서 User와 Notification 엔티티 간의 연관관계 매핑을 설정하는 것은 알림 데이터를 관리하는 데 중요한 부분입니다. 이러한 연관관계 매핑을 통해, 알림을 발생시킨 사용자(fromUser)와 알림을 받는 사용자(toUser) 사이의 관계를 데이터베이스 레벨에서 명확히 정의할 수 있습니다. 이는 알림 데이터를 조회하고 관리하는 과정에서 데이터의 일관성과 무결성을 보장합니다.
User 엔티티 수정
User 엔티티에는 두 개의 리스트를 추가하여, 사용자가 발생시킨 알림(fromUser)과 사용자가 받는 알림(toUsers)을 관리합니다. @OneToMany 어노테이션을 사용하여 Notification 엔티티와의 일대다 관계를 설정합니다. mappedBy 속성을 통해 연관관계의 주인이 아님을 명시하고, cascade = CascadeType.ALL 및 orphanRemoval = true 옵션을 통해 연관된 알림 엔티티의 생명주기를 User 엔티티에 의존하게 합니다.
@OneToMany(mappedBy = "fromUser", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Notification> fromUser = new ArrayList<>();
@OneToMany(mappedBy = "toUser", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Notification> toUsers = new ArrayList<>();
Notification 엔티티 수정
Notification 엔티티에서는 @ManyToOne 어노테이션을 사용하여 User 엔티티와의 다대일 관계를 설정합니다. fetch= FetchType.LAZY 옵션을 사용하여 지연 로딩을 활성화하고, optional = false 옵션으로 알림이 반드시 fromUser와 toUser를 가지도록 합니다. @JoinColumn 어노테이션을 통해 외래 키 컬럼을 명시합니다.
@ManyToOne(fetch= FetchType.LAZY, optional = false)
@JoinColumn(name = "from_user_id")
private User fromUser;
@ManyToOne(fetch= FetchType.LAZY, optional = false)
@JoinColumn(name = "to_user_id")
private User toUser
결론
이러한 연관관계 매핑을 통해, 애플리케이션은 알림 기능을 효율적으로 구현할 수 있습니다. 사용자 간의 상호작용에 따른 알림을 관리하는 과정에서 필요한 데이터 관계를 명확히 정의하고, 데이터베이스에서 알림 관련 정보를 효율적으로 조회하고 처리할 수 있게 됩니다.
'프로젝트 (Java) > 예약마켓' 카테고리의 다른 글
[프로젝트] 30. 게시물 삭제시 본인만 가능하도록 예외 처리 추가 (0) | 2024.01.31 |
---|---|
[프로젝트] 29. 비밀번호 변경 및 회원탈퇴 시 로그아웃 처리 (0) | 2024.01.31 |
[프로젝트] 27. 유효성 검사(validation) 추가 (0) | 2024.01.31 |
[프로젝트] 26. ResponseBodyAdvice를 활용한 공통 응답 형식 추가 (0) | 2024.01.31 |
[프로젝트] 25. 토큰에서 사용자 ID를 가져오도록 리팩토링 (0) | 2024.01.31 |