En fait, j'ai contacté les développeurs JDBC sur Github et après quelques discussions, il semble qu'actuellement la meilleure solution soit d'avoir la déclaration préparée comme suit :
String query = "SELECT id, data FROM table_name WHERE data->'objects' @> ?::jsonb";
et transmettez l'ensemble des critères de recherche en tant qu'objet JSON stringifié pour le paramètre :
PreparedStatement st = connection.prepareStatement(query);
st.setString(1, "[\"id\":" + "id1" + "]");
st.executeQuery();
ce n'est pas une solution parfaite mais semble la meilleure possible en raison du manque de capacités du serveur. Au final ce n'est pas si mal car il n'y a (théoriquement) aucun risque d'injection SQL.
Plus de détails sur le problème lié à Github.