2012-08-30 5 views
0

저는 Modeshape와 modeshape-connector-jdbc-metadata를 사용하고 있습니다. 저장소에 테이블을 나타내는 모든 노드를 가져 오려고합니다. 그 노드는 [mj:catalog] mixin 유형입니다.modeshape querying mixinTypes

public List getDatabases() throws RepositoryException { 
     // Obtain the query manager for the session ... 
     QueryManager queryManager = dbSession.getWorkspace().getQueryManager(); 

     // Create a query object ... 
     Query query = queryManager.createQuery("SELECT * FROM [mj:table]" 
       , Query.JCR_SQL2); 
     // Execute the query and get the results ... 
     QueryResult result = query.execute(); 

     // Iterate over the nodes in the results ... 
     NodeIterator nodeIter = result.getNodes(); 

     List stringResult = new ArrayList(); 
     while (nodeIter.hasNext()) { 
      stringResult.add(nodeIter.nextNode().getName()); 
     } 

     return stringResult; 
    }

를하지만 항상 빈 목록을 반환

나는 다음 코드를 사용하여 스토리지를 조회하고 있습니다.

SELECT unst.*, tbl.* FROM [nt:unstructured] AS unst 
    JOIN [mj:table] AS tbl ON ISSAMENODE(unst,tbl)
SELECT * FROM [nt:unstructured] WHERE [jcr:mixinTypes] = [mj:table]

을하지만 결과는 동일하게 유지 :

은 또한 다음 쿼리를 사용하여 쿼리를 시도했다. 내가 뭘 잘못하고있어?

도움 주셔서 감사합니다.

답변

0

데이터베이스 메타 데이터 노드가 자동으로 인덱싱되지 않는 알려진 문제가 있습니다. 간단한 해결책은 JCR 세션의 getWorkspace() 인스턴스를 org.modeshape.jcr.api.Workspace (ModeShape의 작업 영역에 대한 공개 API)로 캐스팅하고 reindex(String path) 메서드를 호출하고 데이터베이스 카탈로그 노드 (또는 원한다면 조상)의 경로를 전달하는 것입니다.