«Картограф не зарегистрирован для java.util.Optional» с использованием JDBI v2 и java.util.Optional - PullRequest
0 голосов
/ 17 мая 2019

Когда я пытаюсь написать код, подобный следующему:

...
import java.util.Optional;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
...

public abstract class SomethingDAO {
    @RegisterMapper(SomethingMapper.class)
    @SqlQuery("sql/something_select_by_id.sql")
    abstract Optional<Something> selectById(@Bind("id") long id);
}

Почему выдается такая ошибка?

org.skife.jdbi.v2.MappingRegistry$1: No mapper registered for java.util.Optional

    at org.skife.jdbi.v2.MappingRegistry.mapperFor(MappingRegistry.java:83)
    at org.skife.jdbi.v2.RegisteredMapper.map(RegisteredMapper.java:35)
    at org.skife.jdbi.v2.Query$4.munge(Query.java:183)

1 Ответ

2 голосов
/ 17 мая 2019

Вам необходимо добавить аннотацию @SingleValueResult, например:

public abstract class SomethingDAO {
    @RegisterMapper(SomethingMapper.class)
    @SqlQuery("sql/something_select_by_id.sql")
    @SingleValueResult
    abstract Optional<Something> selectById(@Bind("id") long id);
}
...