Alfresco,查询与动态值



我有一个不同值的Map:

    props = new HashMap<String, Object>();
    props.put("cmis:objectTypeId", "D:ruc:PLICO");
    props.put("cmis:name", "PLICO_1.pdf");
    props.put("cmis:description", "Descr");
    props.put("ruc:doc_surname", "Rossi");
    props.put("ruc:doc_name", "Mario");

我想做一个查询(QueryStatement或其他),动态读取这些参数(其中一些可能缺失)并构建QueryStatement。是否存在一种简单的方法来为QueryStatement生成查询String ?或者我应该迭代我的Map来构建包含我查询中的所有参数和值的String ?

我的解决方案,但也许有人知道如何改进它而不动态构建查询字符串:

        StringBuilder query = new StringBuilder("SELECT * FROM ? where ");
        String folder = null;
        if (path!=null)
        {
            folder = findPath(path);
            if (folder==null)
            {
                return null;
            }
            query.append("IN_FOLDER(?) AND ");
        }
        ArrayList <String> values = new ArrayList<String>();
        Map<String, Object> properties = loadAnnotationAndData(doc);
        String objectType = properties.remove(MyEnum.cmis_object_type_id.getValue()).toString();
        for (Map.Entry<String, Object> entry : properties.entrySet())
        {
            System.out.println(entry.getKey() + " - " + entry.getValue());
            query.append(entry.getKey() + "=? AND ");
            values.add(entry.getValue().toString());
        }               
        query.delete(query.length()-4, query.length());
        query.append(" ORDER BY cmis:creationDate");
        System.out.println(query.toString());
        Session cmisSession = getCmisSession();
        QueryStatement qs=
                cmisSession.createQueryStatement(query.toString());
        int offset = 1;
        qs.setType(offset++, objectType);
        if (path!=null)
        {
            qs.setString(offset++, folder);
        }
        for (int i=0; i<values.size(); i++)
        {
            System.out.println(values.get(i).toString());
            qs.setString(i+offset, values.get(i).toString());
        }

相关内容

  • 没有找到相关文章

最新更新