De hecho, contacté a los desarrolladores de JDBC en Github y después de algunas discusiones, parece que actualmente la mejor solución es tener la declaración preparada de la siguiente manera:
String query = "SELECT id, data FROM table_name WHERE data->'objects' @> ?::jsonb";
y pase todos los criterios de búsqueda como objeto JSON en cadena para el parámetro:
PreparedStatement st = connection.prepareStatement(query);
st.setString(1, "[\"id\":" + "id1" + "]");
st.executeQuery();
esa no es una solución perfecta, pero parece la mejor posible debido a la falta de capacidades del servidor. Al final no es tan malo ya que (teóricamente) no hay riesgo de inyección SQL.
Más detalles sobre el problema de Github vinculado.