Я прочитал главу о соединениях в документации по разработке JDBI и узнал о JoinRowMapper и ResultBearing#reduceRows(). и уменьшитьResultSet(), но то, чего я хотел бы достичь, гораздо проще: я не хочу создавать объекты и преобразователи для каждой таблицы, которая является частью соединения — я бы просто хотел выполнить запрос и сопоставить результаты с одиночным объектом, обрабатывая результат так, как будто он получен из одной таблицы.
По сути, я пробовал следующее:
Код: Выделить всё
Optional statusAndAuthor = jdbi.withHandle(
handle -> handle.registerRowMapper(StatusAndAutor.class,
ConstructorMapper.of(StatusAndAutor.class))
.createQuery("""
select r.status, c.author
from public.test_result r
join public.test_case c on r.test_case_id = c.id
limit 1
"""))
.mapTo(StatusAndAutor.class)
.findOne();
Код: Выделить всё
Exception in thread "main" org.jdbi.v3.core.statement.UnableToCreateStatementException: org.postgresql.util.PSQLException: This connection has been closed. [statement:"select r.status, c.author
from public.test_result r
join public.test_case c on r.test_case_id = c.id
limit 1
", arguments:{positional:{}, named:{}, finder:[]}]
at org.jdbi.v3.core.statement.SqlStatement.internalExecute(SqlStatement.java:1801)
at org.jdbi.v3.core.result.ResultProducers.lambda$createResultBearing$3(ResultProducers.java:95)
at org.jdbi.v3.core.result.internal.ResultSetSupplier.get(ResultSetSupplier.java:55)
at org.jdbi.v3.core.result.internal.ResultSetResultIterator.(ResultSetResultIterator.java:50)
at org.jdbi.v3.core.result.internal.ResultSetResultIterable.iterator(ResultSetResultIterable.java:51)
at org.jdbi.v3.core.result.ResultIterable.findOne(ResultIterable.java:193)
at org.guetter.Main.main(Main.java:23)
Caused by: org.postgresql.util.PSQLException: This connection has been closed.
Конечно, я мог бы попытаться воспользоваться предложениями документации по разработке и создать весь необходимый для этого шаблонный код. Но когда я думаю о том, насколько простым и оптимизированным может быть использование JDBI в других сценариях, я задаюсь вопросом, нет ли на самом деле более простого способа добиться того, чего я хочу.
Так есть ли? Неужели нет простого способа сопоставить результат запроса с объединениями с одним объектом?
Подробнее здесь: https://stackoverflow.com/questions/783 ... oming-from