0

我试图执行以下 jcr sql2 查询:

        String expression = "SELECT * FROM [nt:base] AS p " +
            "WHERE  NAME(p) like 'opony.txt'";

但我得到了

javax.jcr.UnsupportedRepositoryOperationException. 

是否有任何其他方式来搜索名称类似于“%example%”的节点?

我也试图搜索具有指定路径的节点

        String expression = "SELECT * FROM [nt:base] " +
            "WHERE PATH([nt:base]) like '/a/b'";

但我得到了

javax.jcr.query.InvalidQueryException: Query:
SELECT * FROM [nt:base] WHERE PATH([(*)nt:base]) like '/a/b'; expected: LENGTH, NAME, LOCALNAME, SCORE, LOWER, UPPER, or CAST

如何搜索路径类似于“%example%”的节点?

我正在使用 JCR_SQL2

javax.jcr.query.Query query = queryManager.createQuery(expression, Query.JCR_SQL2);
4

1 回答 1

0

编辑

几点:

  • 如果你的模式中没有包含像 '%' 这样的通配符,那么 LIKE 和普通的 = 运算符之间没有太大区别。
  • 并非所有 SQL2 实现都支持 PATH() 和 NAME()。他们在 JBoss 下似乎没问题。
  • 要在子树中搜索节点,请使用 ISDSCENDANTNODE() 函数。
  • 有一个可以测试的 [jcr:title] 属性;它与节点名称不同,但它可能符合您的目的。

因此,对于您的第一个查询,请尝试类似

SELECT * FROM [nt:base] AS p WHERE [jcr:title] like '%opony%'
    and ISDESCENDANTNODE('/content/a/b')

关于查询的JBoss 文档相当不错,但请注意,它可能与 vanilla Jackrabbit 不完全一致。我还在 Magnolia 实现中使用了这个备忘单

于 2014-08-14T13:24:50.980 回答