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