Я сталкиваюсь со следующим исключением при попытке запросить или обновить myObject на основе их статус:
Код: Выделить всё
Copy code
Код: Выделить всё
java.lang.IllegalArgumentException: Cannot encode parameter of type Status (IN_PROGRESS)
Передача примитивных типов:
Я убедился, что передаю int ID перечисления Status при вызове методов репозитория, а не самого перечисления.
Пользовательские преобразователи:
Я определил пользовательские преобразователи в R2dbcCustomConversions для обработки преобразования между статусом и целым числом.
Сопоставление сущностей:В сущности MyObject у меня есть:
Код: Выделить всё
@Data
@Table("MYOBJECT")
public class MyObject {
// Other fields...
@Column("STATUS_ID")
private Status status;
}
Код: Выделить всё
public enum Status {
IN_PROGRESS(1), SUCCESS(2), FAILED(3);
public final int id;
Status(int statusId) {
this.id = statusId;
}
public static Status fromId(int id) {
for (Status status : Status.values()) {
if (status.getId() == id) {
return status;
}
}
throw new IllegalArgumentException("Invalid Status ID: " + id);
}
public int getId() {
return id;
}
}
@Slf4j
@Configuration
public class R2dbcCustomConversionConfig {
@Bean
public R2dbcCustomConversions customConversions(ObjectMapper objectMapper) {
List
Подробнее здесь: [url]https://stackoverflow.com/questions/79057543/r2dbc-handling-java-enums-with-postgresql-ids-results-in-cannot-encode-paramet[/url]