작성
·
46
·
수정됨
0
@Getter
@Setter
@Entity
@SuperBuilder
@AllArgsConstructor
@Table(name = "member")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member extends BaseUpdateEntity {
@Id
@GeneratedValue(generator = "uuid2")
private UUID id;
private String email;
private String password;
@Column(columnDefinition = "INT")
@Enumerated(value = EnumType.ORDINAL)
private MemberStatus memberStatus;
}
@Getter
@Setter
@SuperBuilder
@MappedSuperclass
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseUpdateEntity extends BaseEntity {
@LastModifiedDate
private LocalDateTime updatedAt;
@LastModifiedBy
private String updatedBy;
}
@Getter
@Setter
@SuperBuilder
@MappedSuperclass
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@CreatedBy
@Column(updatable = false)
private String createdBy;
}
public Page<AuthInfoDto> searchList(AuthSearchRequestDto requestDto) {
JPAQuery<AuthInfoDto> query = queryFactory.select(Projections.fields(
AuthInfoDto.class,
member.email,
member.memberStatus.as("status"),
member.createdAt
)).from(member)
.where(searchCondition(requestDto)); // 검색 조건 설정
long totalCount = query.fetchCount();
List<AuthInfoDto> authInfoList = this.getQuerydsl().applyPagination(requestDto.getPageable(), query).fetch();
return new PageImpl<>(authInfoList, requestDto.getPageable(), totalCount);
}
사용자 정보를 Pagination해서 출력하게끔 하려고 합니다.
문제가 되는 부분은
List<AuthInfoDto> authInfoList = this.getQuerydsl().applyPagination(requestDto.getPageable(), query).fetch();
해당 코드 부분인데 단순히 query.fetch()를 해서 List를 추출하는 것은 되지만 Pagination을 적용하고자 하면 에러가 납니다.
org.hibernate.query.SemanticException: Could not interpret path expression 'member.createdAt'
에러 내용은 위와 같습니다.
QueryDSL 관련 gradle 정보도 같이 첨부합니다.
// QueryDSL
implementation 'com.querydsl:querydsl-core:5.0.0'
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
implementation 'com.querydsl:querydsl-apt:5.0.0:jakarta'
implementation 'jakarta.annotation:jakarta.annotation-api'
implementation 'jakarta.persistence:jakarta.persistence-api'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
혹시 뭐가 문제일까요?? 도와주세요.
답변 1
0
@Table(name = "member")로 인하여 QMember의 명칭이 member1으로 등록이 되어
사용자의 Pagination 규칙을 적용하려고 할때 member.createdAt으로 들어가서
Query 상으로 Table 명을 못찾아서 나온 문제였습니다.
해당 Member Class를 Members로 수정하고 Table name도 동일하게 수정하여 정상적으로 QueryDSL이 동작하였습니다.