列表中的<Integer>休眠搜索范围



我从hibernate搜索开始,在List<Integer> 上查询时遇到困难

我创建了一个桥来翻译列表<整数>到字符串。由此,我可以按关键字搜索列表中任何项目的精确匹配,但我似乎无法使用范围进行查询。

我的实体A具有一个定义为List的属性"b"。

我想知道是否有人能帮助我查询所有在定义范围内有任何b元素的A实体?

例如:一个具有以下集合{1,10,15}的实例,应该出现在对"b"属性的以下查询中:

低于(20),上述(14),低于(2)

但不是在像这样的搜索中

高于(16)、低于(0)。

我希望我说清楚了。提前感谢!

将桥接器更改为多次存储同一字段,每次都具有Integer列表的值a。因此,假设您的字段名为myInt,您将存储myInt=1,myInt=10和myInt=15,示例代码:

public class MyBridge implements FieldBridge {
    public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
        if (value instanceof List){
            for(Object myInt:(List)value){
                Field myIntField = new Field(name, myInt.toString(), luceneOptions.getStore(), luceneOptions.getIndex(), luceneOptions.getTermVector());
                myIntField.setBoost(luceneOptions.getBoost());
                document.add(myIntField);
            }
        }
    }
}

或者,你可以插入一些自定义的lucene过滤器来实现这一点,但过滤器有点复杂。

最新更新