假设我有存储在Jackrabbit JCR存储库中的节点,它们在存储库中附加了多个"标记"属性。
我想执行一个或查询,其中返回具有带有查询中任何标记的标记的任何节点。但我想按比赛次数排序。因此,所有OR条件匹配的节点将在顶部,而一个仅匹配一个的节点将是最后一个。
我想这和这里的建议是一样的:https://stackoverflow.com/a/3289152/303106
但是AFAIK,我们在SQL2中没有CASE构造。我也不知道XPATH中有什么类似的东西。
那么,我该如何获得相同的结果呢(除了应用程序级别的后期处理,由于性能问题,我更希望避免这种情况)。
我希望这将帮助您执行查询:
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;
}