Skip to content

Commit b3a1468

Browse files
committed
CLAP-453 Refactor: 지연 로딩이 설정되어 있는 member에 대해 추가적인 쿼리가 발생되지 않도록 매퍼 수정
#592
1 parent cb2d8e3 commit b3a1468

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed
Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,34 @@
11
package clap.server.adapter.outbound.persistense.mapper;
22

33
import clap.server.adapter.outbound.persistense.entity.task.CommentEntity;
4-
5-
import clap.server.adapter.outbound.persistense.mapper.common.PersistenceMapper;
6-
4+
import clap.server.domain.model.member.Member;
75
import clap.server.domain.model.task.Comment;
8-
6+
import org.hibernate.Hibernate;
97
import org.mapstruct.Mapper;
108
import org.mapstruct.Mapping;
9+
import org.springframework.beans.factory.annotation.Autowired;
1110

1211
@Mapper(componentModel = "spring", uses = {MemberPersistenceMapper.class, TaskPersistenceMapper.class})
13-
public interface CommentPersistenceMapper extends PersistenceMapper<CommentEntity, Comment> {
12+
public abstract class CommentPersistenceMapper {
13+
14+
@Autowired
15+
MemberPersistenceMapper memberPersistenceMapper;
1416

15-
@Override
1617
@Mapping(source = "modified", target = "isModified")
1718
@Mapping(source = "deleted", target = "isDeleted")
19+
@Mapping(target = "member", expression = "java(mapMember(entity))")
1820
@Mapping(target = "task", ignore = true)
19-
Comment toDomain(final CommentEntity entity);
21+
public abstract Comment toDomain(final CommentEntity entity);
2022

21-
@Override
2223
@Mapping(source = "modified", target = "isModified")
2324
@Mapping(source = "deleted", target = "isDeleted")
24-
CommentEntity toEntity(final Comment domain);
25+
public abstract CommentEntity toEntity(final Comment domain);
26+
27+
protected Member mapMember(CommentEntity entity) {
28+
if (entity == null || entity.getMember() == null || !Hibernate.isInitialized(entity.getMember())) {
29+
return null;
30+
}
31+
return memberPersistenceMapper.toDomain(entity.getMember());
32+
}
33+
2534
}

src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryCustomRepositoryImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package clap.server.adapter.outbound.persistense.repository.history;
22

3+
import clap.server.adapter.outbound.persistense.entity.member.QMemberEntity;
34
import clap.server.adapter.outbound.persistense.entity.task.QCommentEntity;
45
import clap.server.adapter.outbound.persistense.entity.task.QTaskHistoryEntity;
56
import clap.server.adapter.outbound.persistense.entity.task.TaskHistoryEntity;
@@ -18,9 +19,11 @@ public class TaskHistoryCustomRepositoryImpl implements TaskHistoryCustomReposit
1819
public List<TaskHistoryEntity> findAllTaskHistoriesByTaskId(Long taskId) {
1920
QTaskHistoryEntity taskHistory = QTaskHistoryEntity.taskHistoryEntity;
2021
QCommentEntity comment = QCommentEntity.commentEntity;
22+
QMemberEntity member = QMemberEntity.memberEntity;
2123

2224
return queryFactory.selectFrom(taskHistory)
23-
.leftJoin(taskHistory.comment, comment).fetchJoin() // TaskHistory와 Comment를 조인
25+
.leftJoin(taskHistory.comment, comment).fetchJoin()
26+
.leftJoin(taskHistory.modifiedMember, member).fetchJoin()
2427
.where(
2528
// Comment가 없는 경우에는 TaskModificationInfo의 Task 기준
2629
taskHistory.comment.isNull()

0 commit comments

Comments
 (0)