【问题标题】:Spring-roo 1.2.1 cannot filter the finder list?spring-roo 1.2.1 无法过滤finder列表?
【发布时间】:2012-04-28 09:50:04
【问题描述】:

Spring-roo中的“finder list”命令,我添加了“filter”参数来减少动态finder的列表数。但这对我不起作用,它列出了包含“名称”或“价格”的查找器。

 finder list --depth 2 --filter name,price

谁能告诉我如何过滤它们以仅包含“名称”和“价格”查找器? IE。 findBooksByNameNotEqualsAndPrice(字符串名称,浮动价格) findBooksByNameEqualsAndPrice(字符串名称,浮动价格) ......

【问题讨论】:

    标签: spring-roo


    【解决方案1】:

    我检查了 Roo 的源代码,似乎没有办法获得类似 AND 的行为,finder 插件仅支持基于 OR 的逻辑。

    在此处查看 finder 插件源代码:https://github.com/SpringSource/spring-roo/blob/master/addon-finder/src/main/java/org/springframework/roo/addon/finder/FinderCommands.java#L71

    或者这里的源代码:

    final SortedSet<String> result = new TreeSet<String>();
    for (final String finder : finders) {
        required: for (final String requiredEntry : requiredEntries) {
           if (finder.toLowerCase().contains(requiredEntry)) {
                result.add(finder);
                break required;
            }
        }
    }
    return result;
    

    看起来列表操作每次在查找器小写名称中找到任何所需条目时都会向结果列表添加一个过滤器。

    我能想到的过滤列表的唯一方法是复制 finder list 命令的输出并在其上运行类似 grep 的外部实用程序。 否则,您可以尝试尽可能多地匹配查找器名称:例如 EqualsAndPrice(String name 之类的东西。Ater all a plain java String.contains 方法被使用。

    【讨论】:

    • 好的,这可能是唯一的方法。希望 roo 改进这个命令,谢谢。
    【解决方案2】:

    根据我的经验,我注意到在实体的注释中直接复合查找器名称更容易: @RooJpaActiveRecord(finders = { "findTubesByVectorOrResearcher","findTubesByBox" }) 您可以混合使用实体属性,“And”、“Or”、“Like”、“Between”等。

    对于您的问题,我认为 grep 是一个简单的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      相关资源
      最近更新 更多