如何让PSQL/HSQL中的JSON运算符(->)在PanacheEntityBase中生效?
解决PanacheEntityBase中jsonb->运算符报错的问题
在Panache的查询(JPQL/HQL)中无法直接使用PostgreSQL的->运算符,因为JPQL不支持数据库特定语法,你可以用PostgreSQL内置的等效函数替代:
若要提取jsonb字段并返回jsonb类型,对应
->的等效函数是jsonb_extract_path,用法示例:// 原控制台可用SQL:SELECT data->'key' FROM table // Panache中替换写法: List<JsonObject> result = YourEntity.find("SELECT jsonb_extract_path(data, 'key') FROM YourEntity").list();若需要提取后返回文本类型,对应
->>的等效函数是jsonb_extract_path_text,用法:List<String> result = YourEntity.find("SELECT jsonb_extract_path_text(data, 'key') FROM YourEntity").list();
如果要嵌套提取(比如原SQL的data->'parent'->'child'),可以给jsonb_extract_path传递多个参数:
// 等效于 data->'parent'->'child' List<JsonObject> result = YourEntity.find("SELECT jsonb_extract_path(data, 'parent', 'child') FROM YourEntity").list();
如果需要保证跨数据库兼容,可使用JPA的FUNCTION语法包裹函数调用:
List<JsonObject> result = YourEntity.find("SELECT FUNCTION('jsonb_extract_path', data, 'key') FROM YourEntity").list();
内容的提问来源于stack exchange,提问作者codingbellinger
相关产品推荐
相关产品推荐

