Alfresco,查询动态值

时间:2016-09-22 10:14:47

标签: java alfresco cmis

我有一个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。 是否存在为String生成查询QueryStatement的简单方法?或者我应该迭代Map来构建包含查询中所有参数和值的String吗?

1 个答案:

答案 0 :(得分:0)

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

        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());
        }