해결된 질문
작성
·
324
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
allEq를 만들기 위해서,
private BooleanExpression allEq(MemberSearchCondition condition){
return usernameEq(condition.getUsername())
.and(teamNameEq(condition.getTeamName()))
.and(ageGoe(condition.getAgeGoe()))
.and(ageLoe(condition.getAgeLoe()));
}
이런 식의 코드를 만들기 위해서는 null 대신 빈 표현식을 반환해야 하는데, new BooleanExpression()은 안되는 모양이예요.
그래서 찾아봤더니,
null 대신 Expressions.TRUE를 중립조건으로 반환하게 하는거예요.
근데 이러면 나가는 쿼리가,
/* select
member1.id,
member1.username,
member1.age,
team.id,
team.name
from
Member member1
left join
member1.team as team
where
true
and team.name = ?1
and true
and true */ select
m1_0.member_id,
m1_0.username,
m1_0.age,
m1_0.team_id,
t1_0.name
from
member m1_0
left join
team t1_0
on t1_0.team_id=m1_0.team_id
where
true
and t1_0.name=?
and true
and true
이렇게 true로 섞여서 나가지만, 저런 것들은 DB내에서 최적화 해줘서 문제가 없다고 해요.
근데 아무래도 익숙하지 않은 상황에서는 다른 분이 보았을 때 저게 뭐지? 왜 저 쿼리가 나가지? 라는 생각을 할 것 같아요.
그런데, 저 and true를 보고 아, 동적 쿼리를 사용했나? 라고 생각할 수 있는 사람끼리 본다면 굉장히 괜찮은 방법 같아요.
근데 여튼간에 보여지는 것 자체에는 의미없는 쿼리가 나가는 거라서, 유지보수 면에서 좀 그럴 것 같다는 생각이 들어서요.
실무에서는 어떤가요?
감사합니다!