Всъщност се свързах с разработчиците на JDBC в Github и след някои дискусии изглежда, че в момента най-доброто решение е да имате подготвеното изявление, както следва:
String query = "SELECT id, data FROM table_name WHERE data->'objects' @> ?::jsonb";
и предавайте целия критерий за търсене като JSON обект с низове за параметъра:
PreparedStatement st = connection.prepareStatement(query);
st.setString(1, "[\"id\":" + "id1" + "]");
st.executeQuery();
това не е идеалното решение, но изглежда най-доброто възможно поради липсата на сървърни възможности. В крайна сметка не е толкова лошо, тъй като (теоретично) няма риск от SQL инжектиране.
Повече подробности за свързания проблем с Github.