작성
·
239
0
안녕하세요 강사님.
강사님의 강의를 들으면서 처음으로 jpa와 querydsl을 이용하여 프로젝트를 진행하는 중 막히는 부분이 있어 질문드립니다.
primitive type의 필드가 아닌, 커스텀 클래스를 타입으로 갖는 엔티티를 만들어 사용중에 있습니다.
@Entity
public class User{
private Email email;
private String name;
private String password;
}
위와 같은 엔티티가 있을 때, 사용자로부터 넘겨받은 문자열을 가지고
select * from user where email like '%input%' or name like '%input%';
과 같은 쿼리를 사용하려면 어떻게 해야할까요??
검색을 통해, QueryDSL의 @QueryType(PropertyType.STRING) 등 또한 사용해봤지만 원하는 기능을 구현해내지 못했습니다.
답변 1
1
안녕하세요.
지금 상태로는 원하시는 쿼리 중에 "email like '%input%'" 이 부분이 가능해 보이지 않네요. email은 말씀하신대로 Email이라는 커스텀 클래스의 인스턴스라서 문자열과 like 비교를 할 수 없을겁니다. 대신, Email 안에 실제 이메일 값을 가지고 있는 필드를 가지고 like 비교를 하는 쿼리를 만든다면 가능할 것 같습니다.
제가 보기엔 맵핑부터 다시 해봐야 할것 같습니다. Email이라는 타입이 User 테이블에 어떤 식으로 저장이 되길 바라시는건가요? email 값만 저장되도 된다면 JPA Custom type mapping이라는 키워드로 검색해서 커스텀 타입을 하나의 컬럼으로 맵핑하는 방법부터 학습해야 합니다. 그럼 Email을 email이라는 varchar 타입의 컬럼으로 맵핑하는 방법을 알아낼 수 있으실테고, 그 이후에는 원하시는 쿼리를 만드실 수 있을 겁니다.
감사합니다.