Учитывая следующий JSON, который хранится как jsonb в таблице postgres:
{
"object" : {
"array" [
{
"uuid" : "34ad3558-a3e7-43d0-826f-afddce255b20"
}
]
}
}
У меня есть рабочий запрос для поиска, если в документе JSON присутствует значение field
:
select * from my_table
where my_json@>'{"object": {"array" : [{"field": "34ad3558-a3e7-43d0-
826f-afddce255b20"}]}}';
Однако, когда я пытаюсь реплицировать этот запрос в Spring-Data-JPA, используя собственный запрос в JPARepository, я получаю следующее исключение:
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter with that position [1] did not exist
Я изначально попробовал:
@Query(value = "Select * From my_table"
+ "and my_json@>'{\"object\": {\"array\" : [{\"uuid\": \"?1\"}]}}'",
nativeQuery = true)
Set<MyEntity> myQuery(UUID uuid);
После этого я попытался связать параметр с @Param
:
@Query(value = "Select * From my_table"
+ "and my_json@>'{\"object\"\\: {\"array\" \\: [{\"uuid\"\\: \":uuid\"}]}}'",
nativeQuery = true)
Set<MyEntity> myQuery(@Param("uuid") 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
}
Другие запросы, которые задействуют сущность, прекрасно работают с привязкой поля jsonb к сущности MyJson. Есть ли способ сделать эту работу?