1

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"適切な結果が得られます。
多くの参考文献を検索しましたが、ほとんどすべての例が私のものと同じです。そのため、どこに問題があるのか​​ わかりません。誰でもこれを経験したことがある人は助けてください。

4

1 に答える 1

4

JCR-SQL2 クエリ言語を使用している場合は、セレクター名を角かっこで囲む必要があります。

SELECT * FROM [public:hours]

詳細については、オンラインでも入手できるJSR-283 (別名、JCR 2.0) 仕様のセクション 6.7.4 を参照してください。名前が有効な SQL92 識別子である場合、角かっこの引用文字は必要ないことに注意してください。SQL92 識別子では「:」文字が許可されていないため、ネームスペース プレフィックスを含むノード タイプ名は常に引用符で囲む必要があります。

もちろん、これは「public:hours」という名前のノード タイプがあることを前提としています。ここで、「public」はネームスペース プレフィックスです。

于 2012-02-20T23:01:56.827 に答える