実際、Github でJDBC開発者に連絡しました。 そして、いくつかの議論の後、現在のところ最善の解決策は、次のように準備されたステートメントを持つことであるように思われます:
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の問題の詳細。