• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

collection contain 관련

20.06.13 13:38 작성 조회수 893

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 타입을 사용하고, 조회 메서드에서 파싱해서 컬렉션으로 변환한 다음 반환한다.

감사합니다.