작성
·
1.2K
0
안녕하세요
query dsl 사용중 collection contain 관련 문의 드립니다.
entity의 collection attribute를 하나의 colume으로 관리하기 위해서 @Convert를 사용중인데
querydsl에서 해당 collection의 contain 으로 실행시 NPE가 발생합니다. @Type을 사용해도 동일하네요.
이를 해결하기 위한 방법이 있는가요 ?
@Entity
public class PrimitiveCollection {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Convert(converter = StringListConverter.class)
private List<String> yourList;
}
@Converter
public class StringListConverter implements AttributeConverter<List<String>, String> {
private static final String SPLIT_CHAR = ";";
@Override
public String convertToDatabaseColumn(List<String> stringList) {
return String.join(SPLIT_CHAR, stringList);
}
@Override
public List<String> convertToEntityAttribute(String string) {
return Arrays.asList(string.split(SPLIT_CHAR));
}
}
List<PrimitiveCollection> bbb = queryFactory.selectFrom(QPrimitiveCollection.primitiveCollection)
.where(QPrimitiveCollection.primitiveCollection.yourList.contains("bbb"))
.fetch();
답변 1
1
안녕하세요. @Todo님^^
아쉽게도 임의의 컨버터를 사용해서 리스트를 만들면, contain같은 명령어를 사용할 수 없습니다.
대안으로는 다음 두가지 정도가 있습니다.
1. 실제 @ElementCollection을 사용한다.
2. 엔티티에서는 String 타입을 사용하고, 조회 메서드에서 파싱해서 컬렉션으로 변환한 다음 반환한다.
감사합니다.