@Query(value = "SELECT * FROM person WHERE school = :schoolId AND details @> '{\"id\":\"1234\",\"name\":\"John\"}'", nativeQuery = true)
この作品私は@Param( "schoolIdに")文字列schoolId
を渡しています。しかし、私はのparamとしてJSONを渡すとき、それはで失敗
"org.springframework.dao.InvalidDataAccessResourceUsageException", could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
org.postgresql.util.PSQLException: ERROR: operator does not exist: jsonb @> character varying Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
@Query(value = "SELECT * FROM person WHERE school = :schoolId AND details @> :details", nativeQuery = true)
@Param("schoolId") String schoolId, @Param("details") String details
実際の例外を表示してください。原因は、原因チェーンの最後にある 'SQLGrammarException'を引き起こします。私たちはそれなしでしか推測できません。 - しかし、私の最善の策は、spring + jdbcが '@Param(" details ")String details'パラメータを' VARCHAR'としてバインドすることです。 'uuid'や' json [b] 'のようないくつかの非在来型を使いたいのであれば、通常はJDBCで作業するのは難しいです。接続文字列に 'stringtype = unspecified' [JDBC DSNパラメタ](https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters)を追加するだけで、頭痛を避けることができます。 – pozs
...または 'details @> CAST(:details AS json [b])'のような明示的なキャストを使うことができますが、それはむしろ不快なIMHOです。 – pozs
@pozsあなたは正しいです、それはCAST(:details AS jsonb)として型キャストした後に機能しました。あなたが答えと同じものを投稿することができれば、それを受け入れて質問を終わらせます。 –