gpt4 book ai didi

java - BigDecimal 上的 Hibernate 搜索和范围查询

转载 作者:行者123 更新时间:2023-11-29 08:05:37 26 4
gpt4 key购买 nike

我很难设计一个查询来搜索价格在 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 是此处描述的类:https://hibernate.onjira.com/secure/attachment/15952/proposed_doc.txt

Luke 给我看,我有几份文件,价格在 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 Search 是特定于类型的,并且我的值存储为 longs,我也需要使用 longs 进行查询。我必须将值乘以 100,因为这是桥中的乘数:

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

有关单元测试的更详细答案,请参阅 Hibernate 论坛上的这篇帖子:https://forum.hibernate.org/viewtopic.php?p=2457657#p2457657

关于java - BigDecimal 上的 Hibernate 搜索和范围查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11506059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com