我正在尝试在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
setParameter()
错误。是否有我在hibernate快速构建指南中遗漏的内容。
setParameters
答案 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));
}
}