diff --git a/src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntity.java b/src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntity.java index 95d223fe5..65973164c 100644 --- a/src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntity.java +++ b/src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntity.java @@ -16,20 +16,20 @@ import java.util.List; @Entity -@Table(name = "feeds") +//@Table(name = "feeds") @DiscriminatorValue("FEED") @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class FeedJpaEntity extends PostJpaEntity { - @Column(name = "is_public", nullable = false) + @Column(name = "is_public") private Boolean isPublic; - @Column(name = "report_count", nullable = false) + @Column(name = "report_count") private int reportCount = 0; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "book_id", nullable = false) + @JoinColumn(name = "book_id") private BookJpaEntity bookJpaEntity; @OneToMany(mappedBy = "postJpaEntity", cascade = CascadeType.ALL, orphanRemoval = true) diff --git a/src/main/java/konkuk/thip/post/adapter/out/jpa/PostJpaEntity.java b/src/main/java/konkuk/thip/post/adapter/out/jpa/PostJpaEntity.java index ffac4180c..947264188 100644 --- a/src/main/java/konkuk/thip/post/adapter/out/jpa/PostJpaEntity.java +++ b/src/main/java/konkuk/thip/post/adapter/out/jpa/PostJpaEntity.java @@ -18,7 +18,7 @@ @Entity @Table(name = "posts") @Getter -@Inheritance(strategy = InheritanceType.JOINED) +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "dtype") @NoArgsConstructor(access = AccessLevel.PROTECTED) public abstract class PostJpaEntity extends BaseJpaEntity { diff --git a/src/main/java/konkuk/thip/roompost/adapter/out/jpa/RecordJpaEntity.java b/src/main/java/konkuk/thip/roompost/adapter/out/jpa/RecordJpaEntity.java index 45d92fe60..e9d1de6af 100644 --- a/src/main/java/konkuk/thip/roompost/adapter/out/jpa/RecordJpaEntity.java +++ b/src/main/java/konkuk/thip/roompost/adapter/out/jpa/RecordJpaEntity.java @@ -12,16 +12,17 @@ import lombok.NoArgsConstructor; @Entity -@Table(name = "records") +//@Table(name = "records") @DiscriminatorValue("RECORD") @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class RecordJpaEntity extends PostJpaEntity { + @Column(name = "page") private Integer page; - @Column(name = "is_overview",nullable = false) - private boolean isOverview; + @Column(name = "is_overview") + private Boolean isOverview; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "room_id") diff --git a/src/main/java/konkuk/thip/roompost/adapter/out/jpa/VoteJpaEntity.java b/src/main/java/konkuk/thip/roompost/adapter/out/jpa/VoteJpaEntity.java index 20f9934e9..4bfd4eb77 100644 --- a/src/main/java/konkuk/thip/roompost/adapter/out/jpa/VoteJpaEntity.java +++ b/src/main/java/konkuk/thip/roompost/adapter/out/jpa/VoteJpaEntity.java @@ -12,15 +12,16 @@ import lombok.NoArgsConstructor; @Entity -@Table(name = "votes") +//@Table(name = "votes") @DiscriminatorValue("VOTE") @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class VoteJpaEntity extends PostJpaEntity { + @Column(name = "page") private Integer page; - @Column(name = "is_overview",nullable = false) + @Column(name = "is_overview") private boolean isOverview; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/konkuk/thip/roompost/adapter/out/mapper/RecordMapper.java b/src/main/java/konkuk/thip/roompost/adapter/out/mapper/RecordMapper.java index ed7ee4955..5e0e9911a 100644 --- a/src/main/java/konkuk/thip/roompost/adapter/out/mapper/RecordMapper.java +++ b/src/main/java/konkuk/thip/roompost/adapter/out/mapper/RecordMapper.java @@ -27,7 +27,7 @@ public Record toDomainEntity(RecordJpaEntity recordJpaEntity) { .content(recordJpaEntity.getContent()) .creatorId(recordJpaEntity.getUserJpaEntity().getUserId()) .page(recordJpaEntity.getPage()) - .isOverview(recordJpaEntity.isOverview()) + .isOverview(recordJpaEntity.getIsOverview()) .roomId(recordJpaEntity.getRoomJpaEntity().getRoomId()) .likeCount(recordJpaEntity.getLikeCount()) .commentCount(recordJpaEntity.getCommentCount()) diff --git a/src/main/java/konkuk/thip/roompost/adapter/out/persistence/repository/record/RecordQueryRepositoryImpl.java b/src/main/java/konkuk/thip/roompost/adapter/out/persistence/repository/record/RecordQueryRepositoryImpl.java index 98bb895f8..5e459f116 100644 --- a/src/main/java/konkuk/thip/roompost/adapter/out/persistence/repository/record/RecordQueryRepositoryImpl.java +++ b/src/main/java/konkuk/thip/roompost/adapter/out/persistence/repository/record/RecordQueryRepositoryImpl.java @@ -20,6 +20,7 @@ import java.time.LocalDateTime; import java.util.List; +import static com.querydsl.jpa.JPAExpressions.treat; import static konkuk.thip.post.domain.PostType.RECORD; import static konkuk.thip.post.domain.PostType.VOTE; @@ -31,8 +32,6 @@ public class RecordQueryRepositoryImpl implements RecordQueryRepository { private final JPAQueryFactory queryFactory; private final QPostJpaEntity post = QPostJpaEntity.postJpaEntity; - private final QRecordJpaEntity record = QRecordJpaEntity.recordJpaEntity; - private final QVoteJpaEntity vote = QVoteJpaEntity.voteJpaEntity; private final QUserJpaEntity user = QUserJpaEntity.userJpaEntity; @Override @@ -47,8 +46,6 @@ public List findMyRecords(Long roomId, Long userId, Cursor cur return queryFactory .select(selectPostQueryDto()) .from(post) - .leftJoin(record).on(post.postId.eq(record.postId)) - .leftJoin(vote).on(post.postId.eq(vote.postId)) .join(post.userJpaEntity, user) .where(where) .orderBy(getOrderSpecifiers(roomPostSortType)) @@ -59,13 +56,13 @@ public List findMyRecords(Long roomId, Long userId, Cursor cur private BooleanBuilder buildMyRecordCondition(Long roomId, Long userId) { BooleanBuilder where = new BooleanBuilder(); - BooleanBuilder voteCondition = new BooleanBuilder(); - voteCondition.and(post.dtype.eq(VOTE.getType())) - .and(vote.roomJpaEntity.roomId.eq(roomId)); + BooleanBuilder voteCondition = new BooleanBuilder() + .and(post.dtype.eq(VOTE.getType())) + .and(treat(post, QVoteJpaEntity.class).roomJpaEntity.roomId.eq(roomId)); - BooleanBuilder recordCondition = new BooleanBuilder(); - recordCondition.and(post.dtype.eq(RECORD.getType())) - .and(record.roomJpaEntity.roomId.eq(roomId)); + BooleanBuilder recordCondition = new BooleanBuilder() + .and(post.dtype.eq(RECORD.getType())) + .and(treat(post, QRecordJpaEntity.class).roomJpaEntity.roomId.eq(roomId)); where.and(voteCondition.or(recordCondition)) .and(post.userJpaEntity.userId.eq(userId)) @@ -84,8 +81,6 @@ public List findGroupRecordsOrderBySortType(Long roomId, Long return queryFactory .select(selectPostQueryDto()) .from(post) - .leftJoin(record).on(post.postId.eq(record.postId)) - .leftJoin(vote).on(post.postId.eq(vote.postId)) .join(post.userJpaEntity, user) .where(where) .orderBy(getOrderSpecifiers(roomPostSortType)) @@ -96,26 +91,28 @@ public List findGroupRecordsOrderBySortType(Long roomId, Long private BooleanBuilder buildRecordVoteCondition(Long roomId, Integer pageStart, Integer pageEnd, Boolean isOverview) { BooleanBuilder where = new BooleanBuilder(); - BooleanBuilder voteCondition = new BooleanBuilder(); - voteCondition.and(post.dtype.eq(VOTE.getType())) - .and(vote.roomJpaEntity.roomId.eq(roomId)); + // VOTE + BooleanBuilder voteCondition = new BooleanBuilder() + .and(post.dtype.eq(VOTE.getType())) + .and(treat(post, QVoteJpaEntity.class).roomJpaEntity.roomId.eq(roomId)); if (isOverview) { - voteCondition.and(vote.isOverview.isTrue()); + voteCondition.and(treat(post, QVoteJpaEntity.class).isOverview.isTrue()); } else { - voteCondition.and(vote.isOverview.isFalse()) - .and(vote.page.between(pageStart, pageEnd)); + voteCondition.and(treat(post, QVoteJpaEntity.class).isOverview.isFalse()) + .and(treat(post, QVoteJpaEntity.class).page.between(pageStart, pageEnd)); } - BooleanBuilder recordCondition = new BooleanBuilder(); - recordCondition.and(post.dtype.eq(RECORD.getType())) - .and(record.roomJpaEntity.roomId.eq(roomId)); + // RECORD + BooleanBuilder recordCondition = new BooleanBuilder() + .and(post.dtype.eq(RECORD.getType())) + .and(treat(post, QRecordJpaEntity.class).roomJpaEntity.roomId.eq(roomId)); if (isOverview) { - recordCondition.and(record.isOverview.isTrue()); + recordCondition.and(treat(post, QRecordJpaEntity.class).isOverview.isTrue()); } else { - recordCondition.and(record.isOverview.isFalse()) - .and(record.page.between(pageStart, pageEnd)); + recordCondition.and(treat(post, QRecordJpaEntity.class).isOverview.isFalse()) + .and(treat(post, QRecordJpaEntity.class).page.between(pageStart, pageEnd)); } where.and(voteCondition.or(recordCondition)) @@ -126,16 +123,20 @@ private BooleanBuilder buildRecordVoteCondition(Long roomId, Integer pageStart, // Case: pageExpr (Record, Vote 분기) private NumberExpression pageExpr() { return new CaseBuilder() - .when(post.dtype.eq(RECORD.getType())).then(record.page) - .when(post.dtype.eq(VOTE.getType())).then(vote.page) + .when(post.dtype.eq(RECORD.getType())) + .then(treat(post, QRecordJpaEntity.class).page) + .when(post.dtype.eq(VOTE.getType())) + .then(treat(post, QVoteJpaEntity.class).page) .otherwise(0); } // Case: isOverviewExpr (총평 여부를 정렬 기준으로 사용) private NumberExpression isOverviewExpr() { return new CaseBuilder() - .when(post.dtype.eq(RECORD.getType())).then(record.isOverview.castToNum(Integer.class)) - .when(post.dtype.eq(VOTE.getType())).then(vote.isOverview.castToNum(Integer.class)) + .when(post.dtype.eq(RECORD.getType())) + .then(treat(post, QRecordJpaEntity.class).isOverview.castToNum(Integer.class)) + .when(post.dtype.eq(VOTE.getType())) + .then(treat(post, QVoteJpaEntity.class).isOverview.castToNum(Integer.class)) .otherwise(0); }