我正在使用Spring Data JPA,我的模型中的一个属性是PostgreSQL中的jsonb
列。这是它的映射方式:
@Type(type = "catalog.utils.model.JsonbType")
@Column(name = "marc", columnDefinition = "jsonb")
private Marc marc;
这个对象可以被成功地保存、检索和更新。然后在我的仓库中,我编写了一个根据特定的 json
属性来检索的方法。这个查询在 PostgreSQL 中可以正常工作:
public interface AuthorityRepository extends JpaRepository<Authority, Integer>, JpaSpecificationExecutor<Authority> {
@Query(
value = "SELECT * FROM my_table where marc -> 'controlNumber' = :controlNumber",
nativeQuery = true
)
List<Authority> findAuthoritiesByControlNumber(@Param("controlNumber") String controlNumber);
}
当我尝试使用我的repository的这个方法时,我遇到了这个错误:
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
在控制台中,我看到了刚才描述的查询执行和这个错误消息,我觉得它很困惑,因为当直接在PostgreSQL中执行相同的查询时,它可以正常工作。ERROR SqlExceptionHelper ERROR: operator does not exist: jsonb = character varying
Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
通过这些代码片段,有可能发现我做错了什么吗?
jsonb
在 Hibernate 中没有得到支持,但是(显然)我们可以采用/自定义:https://thorben-janssen.com/persist-postgresqls-jsonb-data-type-hibernate/ (或者 https://www.google.com/search?q=hibernate+jsonb) - xerx593