From b7bd2e0014cd21c8892adc979b5e442c213b8384 Mon Sep 17 00:00:00 2001 From: Jun-Hyeok Sin Date: Sat, 8 Jul 2023 18:09:16 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A0=84=EC=B2=B4=20Entity=20=EC=97=B0?= =?UTF-8?q?=EA=B4=80=EA=B4=80=EA=B3=84=20=EB=A7=A4=ED=95=91,=20Auditing=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20(#13)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: (#12) 전체 Entity 연관관계 매핑, Auditing 기능 추가 * refactor: (#12) DB의 MySQL 방언 설정을 MySQL57Dialect 대신 MySQLDialect를 설정하는 것으로 개선 * feat: (#12) JPA를 통해 insert되는 값을 확인하기 위한 설정 추가 Co-authored-by: jeomxon Co-authored-by: woo-chang Co-authored-by: aiaiaiai1 --- .../domain/category/entity/Category.java | 3 ++- .../votogether/domain/common/BaseEntity.java | 25 +++++++++++++++++++ .../domain/member/entity/Member.java | 3 ++- .../domain/member/entity/MemberCategory.java | 12 ++++++--- .../votogether/domain/post/entity/Post.java | 17 +++++++++---- .../domain/post/entity/PostCategory.java | 12 ++++++--- .../domain/post/entity/PostOption.java | 7 +++--- .../votogether/domain/vote/entity/Vote.java | 12 ++++++--- .../src/main/resources/application.properties | 1 - backend/src/main/resources/application.yml | 23 +++++++++++++++++ 10 files changed, 92 insertions(+), 23 deletions(-) create mode 100644 backend/src/main/java/com/votogether/domain/common/BaseEntity.java delete mode 100644 backend/src/main/resources/application.properties create mode 100644 backend/src/main/resources/application.yml diff --git a/backend/src/main/java/com/votogether/domain/category/entity/Category.java b/backend/src/main/java/com/votogether/domain/category/entity/Category.java index 78d2ee573..454ef4c19 100644 --- a/backend/src/main/java/com/votogether/domain/category/entity/Category.java +++ b/backend/src/main/java/com/votogether/domain/category/entity/Category.java @@ -1,5 +1,6 @@ package com.votogether.domain.category.entity; +import com.votogether.domain.common.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -13,7 +14,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity -public class Category { +public class Category extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/backend/src/main/java/com/votogether/domain/common/BaseEntity.java b/backend/src/main/java/com/votogether/domain/common/BaseEntity.java new file mode 100644 index 000000000..f0895a0dd --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/common/BaseEntity.java @@ -0,0 +1,25 @@ +package com.votogether.domain.common; + +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import java.time.LocalDateTime; +import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +@Getter +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public abstract class BaseEntity { + + @CreatedDate + @Column(columnDefinition="datetime(2)", updatable = false, nullable = false) + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(columnDefinition="datetime(2)", nullable = false) + private LocalDateTime updatedAt; + +} diff --git a/backend/src/main/java/com/votogether/domain/member/entity/Member.java b/backend/src/main/java/com/votogether/domain/member/entity/Member.java index 47f03bbc7..2f3611c43 100644 --- a/backend/src/main/java/com/votogether/domain/member/entity/Member.java +++ b/backend/src/main/java/com/votogether/domain/member/entity/Member.java @@ -1,5 +1,6 @@ package com.votogether.domain.member.entity; +import com.votogether.domain.common.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -16,7 +17,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity -public class Member { +public class Member extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/backend/src/main/java/com/votogether/domain/member/entity/MemberCategory.java b/backend/src/main/java/com/votogether/domain/member/entity/MemberCategory.java index 413e50703..b8faac1e7 100644 --- a/backend/src/main/java/com/votogether/domain/member/entity/MemberCategory.java +++ b/backend/src/main/java/com/votogether/domain/member/entity/MemberCategory.java @@ -1,5 +1,7 @@ package com.votogether.domain.member.entity; +import com.votogether.domain.category.entity.Category; +import com.votogether.domain.common.BaseEntity; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -15,7 +17,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity -public class MemberCategory { +public class MemberCategory extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -25,12 +27,14 @@ public class MemberCategory { @JoinColumn(name = "member_id", nullable = false) private Member member; - private Long categoryId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "category_id", nullable = false) + private Category category; @Builder - private MemberCategory(final Member member, final Long categoryId) { + private MemberCategory(final Member member, final Category category) { this.member = member; - this.categoryId = categoryId; + this.category = category; } } diff --git a/backend/src/main/java/com/votogether/domain/post/entity/Post.java b/backend/src/main/java/com/votogether/domain/post/entity/Post.java index e28868192..383a576cd 100644 --- a/backend/src/main/java/com/votogether/domain/post/entity/Post.java +++ b/backend/src/main/java/com/votogether/domain/post/entity/Post.java @@ -1,10 +1,15 @@ package com.votogether.domain.post.entity; +import com.votogether.domain.common.BaseEntity; +import com.votogether.domain.member.entity.Member; 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 java.time.LocalDateTime; import lombok.AccessLevel; import lombok.Builder; @@ -14,13 +19,15 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity -public class Post { +public class Post extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private Long memberId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id", nullable = false) + private Member member; @Column(length = 100, nullable = false) private String title; @@ -28,17 +35,17 @@ public class Post { @Column(length = 1000, nullable = false) private String content; - @Column(nullable = false) + @Column(columnDefinition="datetime(2)", nullable = false) private LocalDateTime deadline; @Builder private Post( - final Long memberId, + final Member member, final String title, final String content, final LocalDateTime deadline ) { - this.memberId = memberId; + this.member = member; this.title = title; this.content = content; this.deadline = deadline; diff --git a/backend/src/main/java/com/votogether/domain/post/entity/PostCategory.java b/backend/src/main/java/com/votogether/domain/post/entity/PostCategory.java index c059a0b10..833ee1af3 100644 --- a/backend/src/main/java/com/votogether/domain/post/entity/PostCategory.java +++ b/backend/src/main/java/com/votogether/domain/post/entity/PostCategory.java @@ -1,5 +1,7 @@ package com.votogether.domain.post.entity; +import com.votogether.domain.category.entity.Category; +import com.votogether.domain.common.BaseEntity; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -15,7 +17,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity -public class PostCategory { +public class PostCategory extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -25,12 +27,14 @@ public class PostCategory { @JoinColumn(nullable = false) private Post post; - private Long categoryId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "category_id", nullable = false) + private Category category; @Builder - private PostCategory(final Post post, final Long categoryId) { + private PostCategory(final Post post, final Category category) { this.post = post; - this.categoryId = categoryId; + this.category = category; } } diff --git a/backend/src/main/java/com/votogether/domain/post/entity/PostOption.java b/backend/src/main/java/com/votogether/domain/post/entity/PostOption.java index 064ff521a..c0728fb14 100644 --- a/backend/src/main/java/com/votogether/domain/post/entity/PostOption.java +++ b/backend/src/main/java/com/votogether/domain/post/entity/PostOption.java @@ -1,5 +1,6 @@ package com.votogether.domain.post.entity; +import com.votogether.domain.common.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -16,7 +17,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity -public class PostOption { +public class PostOption extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -27,7 +28,7 @@ public class PostOption { private Post post; @Column(nullable = false) - private Long sequence; + private Integer sequence; @Column(length = 50, nullable = false) private String content; @@ -35,7 +36,7 @@ public class PostOption { @Builder private PostOption( final Post post, - final Long sequence, + final Integer sequence, final String content ) { this.post = post; diff --git a/backend/src/main/java/com/votogether/domain/vote/entity/Vote.java b/backend/src/main/java/com/votogether/domain/vote/entity/Vote.java index 1de417718..a5a4afdb8 100644 --- a/backend/src/main/java/com/votogether/domain/vote/entity/Vote.java +++ b/backend/src/main/java/com/votogether/domain/vote/entity/Vote.java @@ -1,6 +1,8 @@ package com.votogether.domain.vote.entity; +import com.votogether.domain.common.BaseEntity; import com.votogether.domain.member.entity.Member; +import com.votogether.domain.post.entity.PostOption; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -16,7 +18,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity -public class Vote { +public class Vote extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -26,12 +28,14 @@ public class Vote { @JoinColumn(name = "member_id", nullable = false) private Member member; - private Long postOptionId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_option_id", nullable = false) + private PostOption postOption; @Builder - private Vote(final Member member, final Long postOptionId) { + private Vote(final Member member, final PostOption postOption) { this.member = member; - this.postOptionId = postOptionId; + this.postOption = postOption; } } diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties deleted file mode 100644 index 8b1378917..000000000 --- a/backend/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ - diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml new file mode 100644 index 000000000..a9455530b --- /dev/null +++ b/backend/src/main/resources/application.yml @@ -0,0 +1,23 @@ +spring: + datasource: + url: jdbc:h2:~/test;MODE=MySQL + username: sa + + jpa: + properties: + hibernate: + format_sql: true + dialect: org.hibernate.dialect.MySQLDialect + show-sql: true + + hibernate: + ddl-auto: create + +logging: + level: + org: + hibernate: + type: + descriptor: + sql: + BasicBinder: TRACE