Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BigDecimal上的Hibernate搜索和范围查询_Java_Hibernate_Search_Lucene_Hibernate Search - Fatal编程技术网

Java BigDecimal上的Hibernate搜索和范围查询

Java BigDecimal上的Hibernate搜索和范围查询,java,hibernate,search,lucene,hibernate-search,Java,Hibernate,Search,Lucene,Hibernate Search,我很难设计一个查询来搜索价格在100到200之间的Item类的所有实例 这是我的项目类: @Entity public class Item { @Id @DocumentId Long id @Field(index = Index.UN_TOKENIZED, store = Store.YES) @NumericField @FieldBridge(impl = BigDecimalNumericFieldBridge.class) BigD

我很难设计一个查询来搜索价格在100到200之间的Item类的所有实例

这是我的项目类:

@Entity
public class Item {
    @Id @DocumentId
    Long id

    @Field(index = Index.UN_TOKENIZED, store = Store.YES)
    @NumericField
    @FieldBridge(impl = BigDecimalNumericFieldBridge.class)
    BigDecimal price = BigDecimal.ZERO
}
BigDecimalNumericFieldBridge是此处描述的类:

卢克告诉我,我有几个文件的价格在100到200之间

我的问题是:

FullTextSession fullTextSession = Search.getFullTextSession(session);
final QueryBuilder queryBuilder =     fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Item).get();

Query rootQuery = queryBuilder.bool()
    .must(queryBuilder.range().onField('price').above(100).createQuery())
    .must(queryBuilder.range().onField('price').below(200).createQuery())
    .createQuery();

FullTextQuery ftq = fullTextSession.createFullTextQuery(rootQuery, Item);
List<Item> instanceList = ftq.list();
但不管界限如何,列表总是空的。 知道我做错了什么吗


顺便说一下,我将Hibernate Search 3.4.1与Hibernate 3.6.10结合使用。

事实上,我的查询方式有一个错误。Hibernate搜索是特定于类型的,并且我的值存储为long,我也需要使用long进行查询。我必须将值乘以100,因为这是桥中的乘数:

Query rootQuery = queryBuilder.bool()
    .must(queryBuilder.range().onField('price').above(10000L).createQuery())
    .must(queryBuilder.range().onField('price').below(20000L).createQuery())
    .createQuery();

有关单元测试的更详细答案,请参阅Hibernate论坛上的这篇文章:

事实上,我的查询方式有一个错误。Hibernate搜索是特定于类型的,并且我的值存储为long,我也需要使用long进行查询。我必须将值乘以100,因为这是桥中的乘数:

Query rootQuery = queryBuilder.bool()
    .must(queryBuilder.range().onField('price').above(10000L).createQuery())
    .must(queryBuilder.range().onField('price').below(20000L).createQuery())
    .createQuery();
有关单元测试的更详细答案,请参阅Hibernate论坛上的这篇文章: