Is there any way to use Booleanbuilder with Query method?

Viewed 132

Hi I'm currently using Query method to get my result. the design of my app is as below.

Member Entity

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mno;

    private String name;

    private String phone;

}

MemberImage Entity

@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString(exclude="member")
public class MemberImage {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long inum;

    private String uuid;

    private String imgName;

    private String path;

    @ManyToOne(fetch=FetchType.LAZY)
    private Member member;
}

and the query method that I'm using

MemberRepository.java

    @Query("select m, mi, count(mi) from Member m"+ " left outer join MemberImage mi on mi.member=m group by m")
    Page<Object[]> getListPage(Pageable pageable);

PageRequestDTO.java

@Builder
@AllArgsConstructor
@Data
public class PageRequestDTO {

    private int page;
    private int size;
    private String type;
    private String keyword;


    public PageRequestDTO(){
        this.page = 1;
        this.size = 10;
    }

    public Pageable getPageable(Sort sort){

        return PageRequest.of(page -1, size, sort);

    }
}

I'm trying to make a search operation with Booleanbuilder like below

 private BooleanBuilder getSearch(PageRequestDTO requestDTO){

        String type = requestDTO.getType();

        BooleanBuilder booleanBuilder = new BooleanBuilder();



        String keyword = requestDTO.getKeyword();

        BooleanExpression expression = qMember.mno.gt(0L);

        booleanBuilder.and(expression);

        if(type == null || type.trim().length() == 0){
            return booleanBuilder;
        }

        BooleanBuilder conditionBuilder = new BooleanBuilder();

        if(type.contains("n")){
            conditionBuilder.or(qMember.name.contains(keyword));
        }
        if(type.contains("p")){
            conditionBuilder.or(qMember.phone.contains(keyword));
        }

        booleanBuilder.and(conditionBuilder);



        return booleanBuilder;
    }

I want the results with Page<Object[]> with the terms of booleanBuilder that I coded. Is there any way to get this result? I tried memberRepository.getListPage(booleanBuilder,pageable) and see if I can get the right results, but it didn't. Any suggestions?

0 Answers
Related