1

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

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

谁能告诉我如何过滤它们只包含“名称”和“价格”查找器?即 findBooksByNameNotEqualsAndPrice(String name, Float price) findBooksByNameEqualsAndPrice(String name, Float price) ......

4

2 回答 2

1

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

在此处查看 finder 插件 src: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 method is used.

于 2012-04-30T20:05:07.597 回答
1

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

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

于 2012-05-05T18:58:04.900 回答