Запрос карты @ElementCollection - PullRequest
0 голосов
/ 28 мая 2018

My Entity использует поле для параметров с типом данных Map.Я могу сохранить эти объекты в БД без проблем.Но как я могу запросить их?

@Entity
public class ActionData {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @ElementCollection
    @CollectionTable(name = "parameter")
    private Map<String, String> parameter = new HashMap<>();

    @ManyToOne
    @JoinColumn(name = "work_id", referencedColumnName = "id", nullable = false)
    private Work work;

    @NotBlank
    private String actionName;

    private Instant requestTime;
    private Instant startTime;
    private Instant endTime;

    // ...
}

Я попробовал репозиторий следующим образом:

public interface ActionRepository extends CrudRepository<ActionData, Integer> {

    ActionData findFirstByWorkAndActionNameAndParameter(Work work, String actionName, Map<String,String> parameter);

    // ...
}

Я пытаюсь запросить конкретные данные ActionData с параметрами:

Work work1 = new Work("xyz", "title1");

Map<String, String> parameter1 = new HashMap<>();
parameter1.put("key1", "value1");

ActionData actionData = actionRepository.findFirstByWorkAndActionNameAndParameter(work1, "action1", parameter1);

Чем я получаю это исключение:

Caused by: java.lang.IllegalArgumentException: Parameter value [{key1=value1}] did not match expected type [java.lang.String (n/a)]

Spring хочет тип String, но это Map.Почему это не работает и как заставить это работать?

Java 8, Spring 5, Spring Boot 2

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