【问题标题】:CMIS - Searching list propertiesCMIS - 搜索列表属性
【发布时间】:2014-11-02 14:54:09
【问题描述】:

使用 CMIS,我可以向对象添加属性。属性可以有一个值,也可以是多值属性。当您在多个对象上具有多值属性时,如何搜索具有该属性并且该属性包含特定值或多个特定值的所有对象?

例如。 (示例取自here

CmisObject cmisobject = ....

Map<String, Object> updateProperties = new HashMap<String, Object>();

List<String> shoppingList = new ArrayList<String>();
shoppingList.add("milk");
shoppingList.add("bread");
shoppingList.add("cheese");
updateProperties.put("my:shopping.list", shoppingList); // multi-value property

cmisobject.updateProperties(updateProperties);

现在,如果我希望对所有具有属性 my:shopping.list 并且该属性包含值 bread 或值 牛奶和奶酪,我该怎么做?

【问题讨论】:

  • 如果您执行像 my:shopping.list = "bread" OR (my:shopping.list = "cheese" and my:shopping.list = "milk") 这样的 cmis 查询会发生什么 - 这不起作用吗?

标签: java apache cmis opencmis apache-chemistry


【解决方案1】:

试试这个:

boolean isPropertyPresent(Map<String, Object> updateProperties) {//should use List<String> instead of Object
    List<String> shoppingList = (List<String>) updateProperties.get("my:shopping.list");
    if (shoppingList != null) {
         return shoppingList.contains("bread") || (shoppingList.contains("milk") && shoppingList.contains("cheese"));
    }
    return false;
}

【讨论】:

  • 这个解决方案意味着首先检索所有存储库对象,然后遍历它们以识别我感兴趣的特定对象。如果我有一个包含数万个对象的存储库,我需要首先检索所有这些,这使得这是一个非常不切实际的解决方案。
  • 如果你没有重复然后使用 HashSet 而不是列表,这意味着你可以说包含 O(1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多