如何编辑Hibernate Search java源代码,或者可能是一种解决方法?

时间:2013-10-24 17:42:28

标签: java hibernate hibernate-search

我正在尝试在hibernate中将FullTextFilters添加到我的FullTextQuery中,并且只有方法FullTextFilter.setParameter(String name, Object value)

我正在尝试创建一个灵活的通用函数,根据查询的实体为查询添加过滤器,有些参数有一个,有些参数有两个,所以我想添加一个方法{{ 1}}; FullTextFilterImpl我可以在其中传递所有参数的名称,并且可能是每个参数的值的多维数组,以转换我当前的代码

setParameters(String[] names, String[] value)

我尝试创建FullTextFilterImpl的子类并在其中放置If( "checking which entity it is"){ fullTextQuery.enableFullTextFilter("FilterName").setParameter("firstFilter", "val1").setParameter("secondFilter", "val2"); } else if("this entity's filter only has one parameter"){ fullTextQuery.enableFullTextFilter("FilterName").setParameter("firstFilter", "val1"); } 函数,但是设置此代码的方式我不确定如何使用它setParameters返回{{1}然后在该对象上调用FullTextQuery.enableFullTextFilter(filterName)。我不确定如何在中间做FullTextFilter

编辑:我已经下载了hibernate-search源代码,并将以下方法添加到FullTextFilterImpl中,我认为它会做我想要的,但是当我去构建它时(甚至只是开箱即用的项目)我得到了所有这些checkstyle setParameter()错误。是否有我在hibernate快速构建指南中遗漏的内容。

setParameters

3 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,则需要Builder pattern

这里有一个你可以使用的例子:

public class FullTextFilter {

    String[] keys;
    Object[] objects;

    private FullTextFilter(String[] keys, Object[] objects) {
    }

    public static FullTextFilterBuilder builder(){
        return new FullTextFilterBuilder();
    }

    public static class FullTextFilterBuilder {

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

        public FullTextFilterBuilder setParameter(String key, Object value){
            parameters.put(key, value);
            return this;
        }

        public FullTextFilter build(){
            return new FullTextFilter(parameters.keySet().toArray(new String[0]), parameters.values().toArray(new Object[0]));
        }
    }

}

然后像这样使用它:

FullTextFilter filter = FullTextFilter.builder().setParameter("", new Object()).setParameter("", new Object()).build();

告诉您这是否正在寻找。 如果不是我会删除我的答案

答案 1 :(得分:1)

您可以轻松地将属性Map传递给自定义过滤器,签名为:

FullTextFilter setParameter(String name, Object value);

所以你可以做到

filter.setParameter( "myMap", properties );

其中properties是一个hashmap。

关于编译错误消息:

  

文件末尾只允许使用一个新行

是来自checkstyle的消息,它验证代码样式是否符合Hibernate代码样式。 修复非常简单:源文件末尾有多个空行,删除它们。错误消息应告诉您需要抛光的文件。

答案 2 :(得分:0)

我认为你想要这个:

fullTextQuery.enableFullTextFilter("FilterName").setParameter("firstFilter", "val1").setParameter("secondFilter", "val2");

fullTextQuery { 名称: “FILTERNAME” ,参数:[“filter1”:“value1”,“filter2”:“value2”] }

static FullTextQuery enableFullTextFilter(String name){...}
FullTextQuery setParameter(String key, String value){
   parameters.put(key, value);
   return this;
}

假设参数hashmap。


看到我有点偏离基地..你不能做这样的事情吗?

setFilters (HashMap<String, String> filters) {
  FullTTextFilter fl = FullTextQuery.enableFullTextFilter("filtername");
  for (String key : filters.keySet()) {
    fl.setParameter(key, filters.get(key));
  }
}