프로젝트 (Java)/예약마켓

[프로젝트] 28. User와 Notification 엔티티 간의 연관관계 매핑

hihyuk 2024. 1. 31. 09:39

프로젝트에 알림 기능을 추가하면서 UserNotification 엔티티 간의 연관관계 매핑을 설정하는 것은 알림 데이터를 관리하는 데 중요한 부분입니다. 이러한 연관관계 매핑을 통해, 알림을 발생시킨 사용자(fromUser)와 알림을 받는 사용자(toUser) 사이의 관계를 데이터베이스 레벨에서 명확히 정의할 수 있습니다. 이는 알림 데이터를 조회하고 관리하는 과정에서 데이터의 일관성과 무결성을 보장합니다.

 

User 엔티티 수정

User 엔티티에는 두 개의 리스트를 추가하여, 사용자가 발생시킨 알림(fromUser)과 사용자가 받는 알림(toUsers)을 관리합니다. @OneToMany 어노테이션을 사용하여 Notification 엔티티와의 일대다 관계를 설정합니다. mappedBy 속성을 통해 연관관계의 주인이 아님을 명시하고, cascade = CascadeType.ALLorphanRemoval = 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 옵션으로 알림이 반드시 fromUsertoUser를 가지도록 합니다. @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

 

결론

이러한 연관관계 매핑을 통해, 애플리케이션은 알림 기능을 효율적으로 구현할 수 있습니다. 사용자 간의 상호작용에 따른 알림을 관리하는 과정에서 필요한 데이터 관계를 명확히 정의하고, 데이터베이스에서 알림 관련 정보를 효율적으로 조회하고 처리할 수 있게 됩니다.