Spring JPA, список запросов ранее сохранялся с AttributeConverter в качестве параметра - PullRequest
0 голосов
/ 17 июня 2020

В моем объекте у меня есть список целых чисел, сохраняемый как String.

 @Entity
 @Table(name = "example_table")
 public class ExampleTable {

    private Long exampleTableId;
    private List<Integer> exampleInts;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getExampleTableId() {
         return exampleTableId;
    }

    public void setExampleTableId(Long exampleTableId) {
         this.exampleTableId = exampleTableId;
    }

    @Convert(converter = IntegerListConverter.class)
    public List<Integer> getExampleInts() {
         return exampleInts;
    }

    public void setExampleInts(List<Integer> exampleInts) {
         this.exampleInts = exampleInts;
    }
}

Он конвертируется конвертером атрибутов:

@Converter
public class IntegerListConverter implements AttributeConverter<List<Integer>, String> {
    private static final String SPLIT_CHAR = ";";

    @Override
    public String convertToDatabaseColumn(List<Integer> longs) {
        return longs == null || longs.isEmpty() ? null : longs.stream()
                .map(String::valueOf)
                .collect(Collectors.joining(SPLIT_CHAR));
    }

    @Override
    public List<Integer> convertToEntityAttribute(String str) {
        return StringUtils.isEmpty(str) ? null :
                Stream.of(str.split(SPLIT_CHAR))
                        .map(Integer::valueOf)
                        .collect(Collectors.toList());
    }
}

Это нормально работает: например, Arrays.asList (1,2,3) сохраняется как «1; 2; 3». Проблема в том, что я пытаюсь найти объект, в котором мой список является параметром запроса, примерно так:

public interface ExampleRepository extends JpaRepository<ExampleTable, Long> {

    @Query("SELECT e FROM ExampleRepository e WHERE e.exampleInts = :exampleInts")
    Optional<ExampleTable> findOne(List<Integer> exampleInts);


}

Попытка найти его заканчивается: Значение параметра [1] не соответствует ожидаемому type [java .util.List (n / a)] Я также пробовал использовать собственный запрос IN (), но он тоже не работает. Я провел небольшое исследование, но не нашел решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...