Java JCR SQL2查询:ISDESCENDATNODE参数的绑定
我正在编写一个JCR SQL2查询,其中列出了给定类型的所有节点,这些节点都是特定路径的后代。 当我这样编写查询时:Java JCR SQL2查询:ISDESCENDATNODE参数的绑定,java,aem,jcr,Java,Aem,Jcr,我正在编写一个JCR SQL2查询,其中列出了给定类型的所有节点,这些节点都是特定路径的后代。 当我这样编写查询时: Query query = queryManager.createQuery( "SELECT * FROM [cq:PageContent] where ISDESCENDANTNODE(\"/content\") AND ([sling:resourceType] = $resourceType)", Query.JCR_SQL2); query.bindValue(
Query query = queryManager.createQuery(
"SELECT * FROM [cq:PageContent] where ISDESCENDANTNODE(\"/content\") AND ([sling:resourceType] = $resourceType)", Query.JCR_SQL2);
query.bindValue("resourceType", session.getValueFactory().createValue("my-type"));
Query query = queryManager.createQuery(
"SELECT * FROM [cq:PageContent] where ISDESCENDANTNODE($base) AND ([sling:resourceType] = $resourceType)", Query.JCR_SQL2);
query.bindValue("base", session.getValueFactory().createValue("/content"));
query.bindValue("resourceType", session.getValueFactory().createValue("my-type"));
它工作得很好,但当我尝试绑定ISDESCENDANTNODE下的内容时,如下所示:
Query query = queryManager.createQuery(
"SELECT * FROM [cq:PageContent] where ISDESCENDANTNODE(\"/content\") AND ([sling:resourceType] = $resourceType)", Query.JCR_SQL2);
query.bindValue("resourceType", session.getValueFactory().createValue("my-type"));
Query query = queryManager.createQuery(
"SELECT * FROM [cq:PageContent] where ISDESCENDANTNODE($base) AND ([sling:resourceType] = $resourceType)", Query.JCR_SQL2);
query.bindValue("base", session.getValueFactory().createValue("/content"));
query.bindValue("resourceType", session.getValueFactory().createValue("my-type"));
query.bindValue(“base”,…)上引发异常:
“javax.jcr.query.InvalidQueryException:java.text.ParseException:query:从[cq:PageContent]中选择*,其中IsDescendatNode($base(*)和([sling:resourceType]=$resourceType);应为:)”
我知道我可以将参数值连接到查询中,但我认为这是一种不好的做法。据我所知,读取
isdescendatof
中的路径
不允许变量绑定。中描述了相同的语法,其中包括可读性很强的铁路图
您是对的,在SQL中直接将查询与用户输入连接起来是一种非常糟糕的做法。但是,与SQL相反,JCR-SQL2不允许您在内容存储库中执行更新。一旦获得了包含节点的结果集,就需要显式地使用JCR API来执行此操作。因此,这样做更安全一些。另一方面,您仍然可以注入一个性能极其糟糕的查询
如果路径来自用户输入,您可以在此处执行以下操作:
路径
参数