Ve skutečnosti jsem oslovil vývojáře JDBC na Github a po několika diskusích se zdá, že v současnosti je nejlepším řešením mít připravený výpis takto:
String query = "SELECT id, data FROM table_name WHERE data->'objects' @> ?::jsonb";
a předejte celá vyhledávací kritéria jako stringified objekt JSON pro parametr:
PreparedStatement st = connection.prepareStatement(query);
st.setString(1, "[\"id\":" + "id1" + "]");
st.executeQuery();
to není dokonalé řešení, ale zdá se nejlepší možné kvůli nedostatku serverových schopností. Nakonec to není tak špatné, protože (teoreticky) nehrozí žádné riziko SQL injection.
Další podrobnosti o propojeném problému Github.