我有以下结构的postgresql数据库
CREATE TABLE products (
id bigserial,
name varchar(30) NOT NULL,
owner_id bigint,
pdata jsonb NOT NULL,
PRIMARY KEY (id)
);
此处pdata的数据类型为jsonb
pdata示例(jsonb数据类型)
"facility": {
"parent": {
"type": "City"
},
"facilityId": "Z00TRIZR6KAQ6"
}
}
我从PGadmin运行下面的查询,它工作正常。我得到了想要的结果
from techwriting.products
where pdata ->'facility' ->'parent'->>'type'='City'
and pdata ->'facility' ->>'facilityId'='Z00TRIZR6KAQ6';
上面的查询基本上是检查jsonb值中的各种属性并给出结果。
我正在使用Spring WebFlux和R2dbc在Java代码中运行相同的查询。我能够在Java中得到相同的响应。
型号等级
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("products")
public class Product {
@Id
private Long id;
private String name;
private String pdata;
@Column("owner_id")
private long ownerId;
}
存储库类
import com.maersk.jsonb.model.Product;
import org.springframework.data.r2dbc.repository.Query;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import reactor.core.publisher.Flux;
public interface ProductRepository extends ReactiveCrudRepository<Product, Long> {
@Query(value="select * from techwriting.products where pdata ->'facility' ->'parent'->>'type'='City' and pdata ->'facility' ->>'facilityId'='Z00TRIZR6KAQ6'")
Flux<Product> findAllByName();
}
响应:我们收到以下响应。响应正确,记录数量相同。
[
{
"id": 1,
"name": "xyz",
"pdata": "{\"facility\": {\"parent\": {\"type\": \"BBSR\"}, \"facilityId\": \"Z00TRIZR6KAQ6\"}}",
"ownerId": 2
}
]
我的问题是:
1.在仓库类中@Query包含了所有硬编码的值。如何动态地做这些?
1.响应包含pdata作为字符串。但是存储在postgresql中的json数据和我得到的结构是不同的。
postgresql中的pdata(jsonb类型):
{
"facility": {
"parent": {
"type": "BBSR"
},
"facilityId": "Z00TRIZR6KAQ6"
}
}
得到回应:
"{\"facility\": {\"parent\": {\"type\": \"BBSR\"}, \"facilityId\": \"Z00TRIZR6KAQ6\"}}"
我们如何将String转换为如上所示的存储在db中的?
1条答案
按热度按时间9gm1akwq1#
我对Q1的回答。