Jag nådde faktiskt JDBC-utvecklare på Github och efter några diskussioner verkar det som att den bästa lösningen för närvarande är att ha det förberedda uttalandet enligt följande:
String query = "SELECT id, data FROM table_name WHERE data->'objects' @> ?::jsonb";
och skicka hela sökkriteriet som ett strängat JSON-objekt för parametern:
PreparedStatement st = connection.prepareStatement(query);
st.setString(1, "[\"id\":" + "id1" + "]");
st.executeQuery();
det är inte en perfekt lösning men verkar vara den bästa möjliga på grund av bristen på serverkapacitet. I slutändan är det inte så illa eftersom det (teoretiskt) inte finns någon risk för SQL-injektion.
Mer information om det länkade Github-problemet.