【发布时间】:2018-03-07 08:17:26
【问题描述】:
我的 postgres 表中有一个 jsonb 列。我正在使用的选择查询是
SELECT distinct metadata->'Country' as metadata FROM documents WHERE metadata?'Country' order by metadata->'Country' asc
它在 postgresql 中运行良好。元数据列中的数据就像
'{"Country":"US","Vendor":"ABC","Year":"2011"}'
选择查询的输出是'US'
当我在 jpa 中使用此查询时,“?”有问题在选择查询中使用,因为它需要一个参数。
Query query = this.em.createNativeQuery(
"SELECT distinct cast(metadata->"+title+") as metadata FROM documents WHERE metadata?"+title+" order by metadata->"+title+" "+sort);
List<Object> obj=query.getResultList();
我该如何解决这个问题?
【问题讨论】:
-
您不能使用准备好的语句占位符来配置查询的结构。只传递值。所以你可以使用
where foo.bar = :someValue,但不能使用where foo.:someProp = 2。 -
@JBNizet 我删除了所有参数并内联。但 '?'仍然是一个问题。预期位置参数计数:1,实际参数:[]
-
我认为 jpa 不理解
?运算符 - 你可以用我猜的函数解决它 -
@VaoTsun 函数?可以举个例子吗?
-
在下面给出一个答案 - 您可以通过明确检查其值是否不为空来检查顶级键是否存在
标签: java sql postgresql jpa jdbc