June 24, 2025 엔티티 공통 규칙을 작성하고 엔티티 도출 과정에서 나눈 디스커션을 기록해둔 문서입니다.


  1. 복합키를 사용하는 엔티티에서의 ID사용 여부 관련 디스커션

    
    package team03.mopl.domain.chat;
    
    import jakarta.persistence.Column;
    import jakarta.persistence.Entity;
    import jakarta.persistence.FetchType;
    import jakarta.persistence.GeneratedValue;
    import jakarta.persistence.GenerationType;
    import jakarta.persistence.Id;
    import jakarta.persistence.JoinColumn;
    import jakarta.persistence.ManyToOne;
    import jakarta.persistence.Table;
    import jakarta.persistence.UniqueConstraint;
    import java.time.Instant;
    import java.util.UUID;
    import org.springframework.data.annotation.CreatedDate;
    import team03.mopl.domain.user.User;
    
    @Entity
    @Table(name = "room_participants", uniqueConstraints = {
        @UniqueConstraint(columnNames = {"user_id", "room_id"})
    })
    public class RoomParticipant {
    
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      private UUID id;
      //JPA 사용시 없으면 불편함...?
    
      @ManyToOne(fetch = FetchType.LAZY, optional = false)
      @JoinColumn(name = "user_id", nullable = false)
      private User user;
    
      @ManyToOne(fetch = FetchType.LAZY, optional = false)
      @JoinColumn(name = "room_id", nullable = false)
      private Room room;
    
      @CreatedDate
      @Column(name = "created_at", nullable = false, updatable = false)
      private Instant createdAt;
    
    }
    
    
    1. id, user_id, room_id, @UniqueConstraint를 함께 쓰기

      장점 : 따로 ID가 있는 거 자체가 DB 롤백에 안 맞다.

      단점 : erd와 안맞음

    2. user_id, room_id, @UniqueConstraint

      기억이 안나. . .

    <aside> 🎉

    FIX : id, user_id, room_id, @UniqueConstraint를 함께 쓰기

    </aside>


  1. LocalDateTime vs Instant

    <aside>

    Instant : UTC 기준

    <aside>

    LocalDateTime

    <aside> 🎉

    FIX : 엔티티 (LocalDateTime) - DB(TIMESTAMP)

    </aside>


  1. GenerationType.AUTO VS GenerationType.IDENTITY

    https://newwisdom.tistory.com/90

    → 이후 알림에서 MongoDB를 쓸 수 있으니, 벤더에 종속되지 않는 AUTO 를 선택하자

    <aside> 🎉

    FIX : GenerationType.AUTO

    </aside>


  1. Dm의 senderId → 객체를 들고오느냐, ID를 들고오느냐

      @ManyToOne(fetch = FetchType.LAZY)
      @JoinColumn(name = "dm_room_id", nullable = false)
      private DmRoom dmRoom;
    
     @Column(name = "dm_room_id", nullable = false)
     private UUID dmRoomId;
    
    // dm.getSenderId().getEmail()
    // dm.getSenderId().getEmail()
    // 창우님 : 되던데, 찾아보겠습니다 -> OK!! 되면 좋겠습니다
    

    <aside> 🎉

    FIX : 본인이 편한 거 써보죠?! OK

    </aside>