스프링과 JPA 기반 웹 애플리케이션 개발 #54 스터디 도메인

Jake Seo·2021년 6월 15일
0

스프링과 JPA 기반 웹 애플리케이션 개발 #54 스터디 도메인

해당 내용은 인프런, 스프링과 JPA 기반 웹 애플리케이션 개발의 강의 내용을 바탕으로 작성된 내용입니다.

강의를 학습하며 요약한 내용을 출처를 표기하고 블로깅 또는 문서로 공개하는 것을 허용합니다 라는 원칙 하에 요약 내용을 공개합니다. 출처는 위에 언급되어있듯, 인프런, 스프링과 JPA 기반 웹 애플리케이션 개발입니다.

제가 학습한 소스코드는 https://github.com/n00nietzsche/jakestudy_webapp 에 지속적으로 업로드 됩니다. 매 커밋 메세지에 강의의 어디 부분까지 진행됐는지 기록해놓겠습니다.


스터디 도메인

Study 엔티티


public class Study {
  private Long Id;
  private Set<Account> managers;
  private Set<Account> members;
  ...
  private Set<Tag> tags;
  private Set<Zone> zones;
}

객체 관점에서 Study 엔티티와 다른 엔티티의 관계

  • Study에서 Account 쪽으로 @ManyToMany 단방향 관계 두개 (managers, members)
  • Study에서 Zone으로 @ManyToMany 단방향 관계
  • Study에서 Tag@ManyToMany 단방향 관계

Study

@Entity
@Getter @Setter @EqualsAndHashCode(of = "id")
@Builder @NoArgsConstructor @AllArgsConstructor
public class Study {
    @Id @GeneratedValue
    private Long id;
    @ManyToMany
    private Set<Account> managers;
    @ManyToMany
    private Set<Account> members;
    @Column(unique = true)
    private String path;
    private String title;
    private String shortDescription;
    // 스터디 정보는 varchar 안에 담기 힘들다.
    @Lob @Basic(fetch = FetchType.EAGER)
    private String fullDescription;
    @Lob @Basic(fetch = FetchType.EAGER)
    private String image;
    @ManyToMany
    private Set<Tag> tags;
    @ManyToMany
    private Set<Zone> zones;
    private LocalDateTime publishedDateTime;
    private LocalDateTime closedDateTime;
    private LocalDateTime recruitingUpdatedTime;
    private boolean isRecruiting;
    private boolean isPublished;
    private boolean isClosed;
    private boolean isUsingBanner;
}

Account, Tag, Zone을 단방향으로 참조한다. 일단, @ManyToMany를 쓰는 형태로 구현해보자. 그리고 스터디 설명이나 이미지 등 긴 문자열이 들어가는 부분은 @Lob으로 처리해주었다.

profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글