当前位置: 首页 > 知识库问答 >
问题:

对jsonb字段的Spring-Data-JPA本地查询

葛霄
2023-03-14

给定以下JSON,它作为jsonb存储在postgres表中:

{
    "object" : {
        "array" [
            {
                "uuid" : "34ad3558-a3e7-43d0-826f-afddce255b20"
            }
        ]
    } 
}

我有一个工作查询来搜索JSON文档中是否存在字段值:

select * from my_table 
where my_json@>'{"object": {"array" : [{"field": "34ad3558-a3e7-43d0- 
826f-afddce255b20"}]}}';

但是,当我试图在JPARepository上使用本机查询在Spring-Data-JPA中复制这个查询时,我总是得到以下异常:

org.springframework.dao.invalidDataAccessapiusageException:位置为[1]的参数不存在

@Query(value = "Select * From my_table"
     + "and my_json@>'{\"object\": {\"array\" : [{\"uuid\": \"?1\"}]}}'",
    nativeQuery = true)
Set<MyEntity> myQuery(UUID uuid);
@Query(value = "Select * From my_table"
     + "and my_json@>'{\"object\"\\: {\"array\" \\: [{\"uuid\"\\: \":uuid\"}]}}'",
    nativeQuery = true)
Set<MyEntity> myQuery(@Param("uuid") UUID uuid);
@Query(value = "Select * From my_table"
     + "and my_json@>'{\"object\"\\: {\"array\" \\: [{\"uuid\"\\: \":uuid\"}]}}'",
    nativeQuery = true)
Set<MyEntity> myQuery(@Param("uuid") String uuid);

还是什么都不起作用。JPA实体如下所示:

@Entity
public class MyEntity {

    @Id
    private long id;

    @Column("my_json")
    private MyJson myJson
}

涉及该实体的其他查询可以很好地使用绑定到MyJson实体的jsonb字段。有没有办法让这起作用?

共有1个答案

董宜然
2023-03-14

必须在本机查询中强制转换值。

cast(:uuid as UUID)

因此您的查询变成。

@Query(value = "Select * From my_table"
 + "and my_json@>'{\"object\"\\: {\"array\" \\: [{\"uuid\"\\: cast(:uuid as UUID)}]}}'",
nativeQuery = true)
 类似资料:
  • 我有一个场景,我想把从JPA存储库中的本机查询中提取的数据映射到自定义对象。 我的存储库代码如下: 我的自定义类代码如下: 但是我在运行应用程序时遇到了以下错误 原因:org。springframework。数据地图。PropertyReferenceException:找不到类型优惠券的属性FindTodayPoffer! 我应该移动名称查询和sql结果映射到我的实体类吗?问题是我不想污染我的实

  • 我在spring boot中与用户和角色有很多对很多的关系。我在数据库中有三个表(Role_utilisateur,users_roles和utilisateurs)。在我的存储库中,ireturn列出了我的名为RoleEntite的实体,它有两个属性(nom和id)。 当我调用函数时 我在java eclipse中得到了这个错误 org.springframework.security.auth

  • 问题内容: 我有实体和 我可以按用户实体获得所有测试: 但是我可以使用哪个查询查找所有测试? 问题答案: 以下方法签名将使你想要: 这是使用Spring Data JPA 的属性表达式功能。签名将转换为。请注意,这将对给定的用户名执行完全匹配。

  • 我正在使用Spring Data JPA,并试图将查询添加到我的存储库中。我试图在没有@Query注释的情况下构建查询,比如: 我的目标是构建这样的查询: 我的问题是OR子句。有没有办法确保有括号?否则,逻辑就不对了。我在这里找到的例子:http://static.springsource.org/spring-data/data-jpa/docs/1.0.0.M1/reference/html/

  • 我有一个LOCATION实体,它包含国家、州和城市。并且我有一个LocationRepository接口定义为: 我想按国家找到所有的州。我可以遵循方法名称标准来查询位置实体的所有内容。如果我想要列表,我需要创建StateRepository接口并在其中查询关于状态的一切吗?如果我可以从LocationRepository中获取它,那么方法是什么样子的?我假设它看起来会像下面这样(当然不起作用)。