0

複数の「タグ」プロパティがアタッチされている Jackrabbit JCR リポジトリにノードが格納されているとします。

クエリ内のいずれかのタグを持つタグを持つノードが返される or クエリを実行したいと考えています。しかし、私はそれらを一致数で並べたいと思っています。したがって、すべての OR 条件が一致するノードが一番上になり、1 つだけ一致するノードが最後になります。

これは、こちらの提案と同じだと思います: https://stackoverflow.com/a/3289152/303106

しかし、私の知る限り、SQL2 には CASE 構造がありません。また、XPATH に相当するものも知りません。

では、どうすれば同じ結果を得ることができますか (それ以外は、アプリケーション レベルでの後処理です。これは、パフォーマンスの問題のために避けたいと思います)。

4

1 に答える 1

0

これがクエリの実行に役立つことを願っています:

public FolderListReturn listFolder(String parentNode, String userid, String password) {
    System.out.println("getting folders and files from = "+parentNode+" of user : "+userid);


    SessionWrapper sessions = JcrRepositoryUtils.login(userid, password);
    Session jcrsession = sessions.getSession();

    Assert.notNull(name);
    FolderListReturn folderList1 = new FolderListReturn();
    ArrayOfFolders folders = new ArrayOfFolders();
    try {
                javax.jcr.query.QueryManager queryManager;

                queryManager = jcrsession.getWorkspace().getQueryManager();
                **String expression = "select * from [nt:folder] AS s WHERE ISCHILDNODE(s,'"+name+"')and CONTAINS(s.[edms:owner],'*"+userid+"*')  ORDER BY s.["+Config.EDMS_Sorting_Parameter+"] ASC";**

                javax.jcr.query.Query query = queryManager.createQuery(expression, javax.jcr.query.Query.JCR_SQL2);
                javax.jcr.query.QueryResult result = query.execute();
                        for (NodeIterator nit = result.getNodes(); nit.hasNext();) {
                Node node = nit.nextNode();
                Folder folder = new Folder();
                folder=setProperties(node,folder,userid,password,jcrsession,name);
                folders.getFolderList().add(folder);
                }
        folderList1.setFolderListResult(folders);
        folderList1.setSuccess(true);

    } catch (Exception e) {
        e.printStackTrace();
    } finally{
        //JcrRepositoryUtils.logout(sessionId);
    }
    return folderList1;
}

于 2015-09-14T11:01:23.090 に答える