конструкция запроса jcr - PullRequest
       79

конструкция запроса jcr

1 голос
/ 21 февраля 2012

Я строю запрос jcr и получаю данные из репозитория.Вот мой код:

    String queryString = "SELECT * FROM public:hours";

try {
  // get session
  Session session = requestContext.getSession();

  // create query from queryString constructed
  Query q = session.getWorkspace().getQueryManager().createQuery(queryString, Query.JCR_SQL2); 

  // execute query and retrieve result
  QueryResult result = q.execute();  


  // debug line
  log.error("query is", q.getStatement());
....

Но это не может быть успешно выполнено.Это дает мне ошибку, что

Repositorty Failed: 
[INFO] [talledLocalContainer] javax.jcr.query.InvalidQueryException: Query:
[INFO] [talledLocalContainer] SELECT * FROM public:(*)hours; expected: <end>

В jcr-shell, это работает, если я наберу query sql "select * from public:hours" и даст мне надлежащие результаты.
Я искал много ссылок, но почти каждый пример совпадает с моим.поэтому я не уверен, где проблема.Любой, кто имеет опыт работы с этим, пожалуйста, помогите.

1 Ответ

4 голосов
/ 21 февраля 2012

Если вы используете язык запросов JCR-SQL2, вам следует заключить имя селектора в квадратные скобки:

SELECT * FROM [public:hours]

Подробнее см. В разделе 6.7.4 JSR-283 (он же, JCR 2.0) спецификация, которая также доступна онлайн .Обратите внимание, что символы кавычек в квадратных скобках не требуются, если имя должно быть допустимым идентификатором SQL92.Имена типов узлов, содержащие префиксы пространства имен, всегда должны заключаться в кавычки, поскольку символ «:» недопустим в идентификаторах SQL92.

Конечно, это предполагает, что у вас есть тип узла с именем «public: hours»,где "public" - это префикс пространства имен.

...