Spring-roo 1.2.1无法过滤查找器列表?

时间:2012-04-28 09:50:04

标签: spring-roo

在Spring-roo中的“finder list”命令中,我添加了“filter”参数来减少动态查找器的列表编号。但这对我没有用,它列出了包含“名字”或“价格”的发现者。

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

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

2 个答案:

答案 0 :(得分:1)

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

在此处查看finder addon 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;

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

我能想到过滤列表的唯一方法是复制 finder list 命令的输出并在其上运行外部类似grep的实用程序。 否则,您可以尝试尽可能多地匹配查找程序名称:例如 EqualsAndPrice(字符串名称)。使用所有普通java String.contains 方法。< / p>

答案 1 :(得分:1)

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

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